Cronjob funziona prima dell'orario previsto, cosa potrebbe essere sbagliato?


10

Ho sotto il crontab in programma per sabato che cade tra i giorni 19-23, non sono sicuro del motivo per cui è andato in onda il 20 (venerdì). Qualche ipotesi?

00 21 19-23 * 6 <command>

1
Potresti trovare qualche ispirazione in /etc/cron.d/mdadm usato su Ubuntu e Debian. Ecco come funziona la prima domenica di ogni mese: 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

grazie kasperd, 0 18 * * 6 [date +\%d -le 07] && <task> sta funzionando bene per me, dove è richiesto il primo sabato di ogni mese.
simer

Risposte:


16

Quella espressione di Cron si traduce in:

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

Quindi ha detto esplicitamente a cron di correre venerdì 20. Questo è a causa di:

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).

Questa informazione proviene da questo pratico strumento Cron: http://crontab.guru/

Per fare in modo che il tuo lavoro venga eseguito in determinati giorni in cui è sabato, puoi utilizzare:

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

Questa soluzione proviene da crontab giorno della settimana vs giorno del mese?


6
Attenzione % ha un significato speciale in cronjobs - separa lo stdin del comando.
grawity
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.