Cronjob berjalan sebelum waktu yang dijadwalkan, apa yang bisa salah?

10

Saya memiliki jadwal crontab di bawah untuk hari Sabtu yang jatuh antara hari 19-23, saya tidak yakin mengapa itu berjalan pada tanggal 20 (Jumat). Ada tebakan?

00 21 19-23 * 6 <command>
simer
sumber
1
Anda mungkin menemukan beberapa inspirasi dalam /etc/cron.d/mdadmdigunakan di Ubuntu dan Debian. Beginilah cara kerjanya pada hari Minggu pertama setiap bulan:57 0 * * 0 root if [ -x /usr/share/mdadm/checkarray ] && [ $(date +\%d) -le 7 ]; then /usr/share/mdadm/checkarray --cron --all --idle --quiet; fi
kasperd
Terima kasih kasperd, 0 18 * * 6 [date +\%d -le 07] && <task> bekerja dengan baik untuk saya, di mana ia harus dijalankan pada hari Sabtu pertama setiap bulan.
simer

Jawaban:

16

Ekspresi Cron itu diterjemahkan menjadi:

At 21:00 on the 19, 20, 21, 22 and 23rd of every month and every Saturday.

Jadi secara eksplisit menyuruh cron untuk menjalankan pada hari Jumat tanggal 20. Ini karena:

When the schedule specifies both date and weekday, they're combined with a logical OR,
i.e. the job will run if current_minute == scheduled_minute 
&& current_hour == scheduled_hour && current_month == scheduled_month && 
(current_day == scheduled_date OR current_weekday == scheduled_weekday).

Informasi ini adalah dari alat Cron ini berguna: http://crontab.guru/

Untuk membuat pekerjaan Anda berjalan pada hari-hari tertentu ketika hari Sabtu Anda dapat menggunakan:

00 21 19-23 * * test $(date +%u) -eq 6 && command

Solusi ini dari crontab hari dalam seminggu vs. hari dalam sebulan?

Madoc Comadrin
sumber
6
Waspadalah yang %memiliki arti khusus dalam cronjobs - ini memisahkan perintah stdin.
user1686