Сроки выполнения ежедневной работы анакрона

Я установил ежедневную работу Anacron, которая запускает форму /etc/cron.daily, От /etc/crontab Я вижу, что он должен работать ежедневно в 06:25 (или при запуске / перезагрузке).

Однако, когда дата меняется (00:00) и компьютер включен, я не хочу, чтобы anacron ждал до 06:25. Если компьютер включен, я бы хотел запустить скрипт, как только дата изменится (00:00). Имеет ли смысл добавлять задание cron для запуска anacron @hourly?

большое спасибо

4 ответа

Решение

Я нашел, как это сделать, и подытожил это в своем блоге:

Если вы хотите изменить поведение anacron выполнить, как только день изменится (и не ждать до 7:30 как по умолчанию) выполните следующие действия:

gksu gedit /etc/cron.d/anacron

и добавьте последние 2 строки (последняя строка будет перезапускать anacron каждый час):

01 0    * * *   root test -x /etc/init.d/anacron && /usr/sbin/invoke-rc.d anacron start >/dev/null
01 0    * * *   root start -q anacron || :
@hourly root start -q anacron || :

Ответ Халеда не верен. Изменение этой строки не будет иметь эффекта, если anacron установлен (что по умолчанию):

25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )

Если анакрон существует, test -x /usr/sbin/anacron вернусь trueи предотвратить запуск второй половины этой строки. Другой ответ (редактирование /etc/cron.d/anacron) правильно, так как это конфиг, который запускает сам анакрон.

Начиная с Ubuntu 19.10 (и, возможно, ранее) anacron запускается с использованием systemd таймер.

Решение

Способ изменить anacron время выполнения с этой командой:

sudo systemctl edit --full anacron.timer

Затем измените строку:

OnCalendar=*-*-* 07..23:30

Что не работает

Как объясняется в других ответах, редактирование /etc/crontab не помогает.

25 7    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )

Часть перед оператором || только проверяет, если anacronустановлен, он ничего не выполняет. И часть после выполняется только в том случае, если предыдущая часть не завершилась успешно (ленивая оценка оператора), что тогда будет означать anacron не установлен.

Редактирование /etc/cron.d/anacron тоже не помогает.

30 7-23 * * *   root    [ -x /etc/init.d/anacron ] && if [ ! -d /run/systemd/system ]; then /usr/sbin/invoke-rc.d anacron start >/dev/null; fi

Состояние if [ ! -d /run/systemd/system ] предотвращает запуск сценария при установке systemd.

Правильный способ изменить время выполнения - отредактировать systemd таймер, как объяснялось в начале.

Согласно другим ответам:

редактировать первые два столбца /etc/cron.d/anacron изменить время запуска анахрона.

(/etc/crontab значения не вступают в силу из-за || ...)

Вы можете просто изменить строку:

25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )

читать

0 0    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )

Это позволит запускать ежедневные задания cron в полночь.

Другие вопросы по тегам