Cronjob запускается раньше запланированного времени, что может быть не так?


10

У меня ниже crontab, запланированный на субботу, которая выпадает между 19-23 днями, я не уверен, почему он работал 20 (пятница). Есть догадки?

00 21 19-23 * 6 <command>

1
Вы можете найти вдохновение в /etc/cron.d/mdadmиспользовании в Ubuntu и Debian. Вот как работает первое воскресенье каждого месяца: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

спасибо kasperd, 0 18 * * 6 [date +\%d -le 07] && <task> работает хорошо для меня, где необходимо бежать в первую субботу каждого месяца.
симер

Ответы:


16

Это выражение Cron переводится как:

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

Так что он явно сказал, что cron будет работать в пятницу, 20-го. Это из-за:

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

Эта информация взята из этого удобного инструмента Cron: http://crontab.guru/

Чтобы ваша работа выполнялась в определенные дни, когда это суббота, вы можете использовать:

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

Это решение от crontab день недели против дня месяца?


6
Остерегайтесь того %, что в cronjobs имеет особое значение - он разделяет стандартный ввод команды.
user1686
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.