Сроки выполнения ежедневной работы анакрона
Я установил ежедневную работу 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 в полночь.