Планирование работы с использованием crontab, что произойдет, когда компьютер выключится в это время?

85

Я планирую некоторые задачи, используя crontab.

Что произойдет, если мой компьютер выключится или выключится в то время, когда cron должен был что-то сделать?

Выполняется ли каждое пропущенное задание cron после включения компьютера или пропущенные задания на этот день игнорируются? Если пропущенные задания не возобновляются, есть ли способ настроить cron так, чтобы он запускал пропущенные задания после включения компьютера?

seg.server.fault
источник
3
Я пытался найти учебник по анакрону в сети, но не смог найти ни одного хорошего. Просмотр справочных страниц также не сильно мне помог. Как я могу изменить уже существующий crontab, чтобы он изменился на anacron ?? Или любой учебник в этом будет очень полезен
seg.server.fault
1
Я отредактировал свой ответ, включив несколько примеров. Надеюсь, это поможет!
Джефф

Ответы:

70

Когда ваш компьютер выключен (или демон cron не работает), задания cron не будут запущены.

Если у вас есть задания, которые вы хотели бы запускать по факту в те моменты, когда компьютер выключен, используйте anacron. Установлено по умолчанию, для получения дополнительной информации смотрите man anacron, man anacrontab или файл / etc / anacrontab.

Ubuntu по умолчанию использует anacron для записей в crontab:

/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly

оставляя оставшиеся crontabs для обработки главным демоном cron, а именно:

/etc/crontab
/etc/cron.d
/var/spool/cron

ПРИМЕЧАНИЯ

Сам Anacron не работает как демон, но полагается на скрипты запуска системы и сам cron для запуска.

В окне Ubuntu 8.04, которое я смотрю, /etc/init.d/anacron запускается при загрузке и снова cron каждое утро в 07:30.

README по адресу /usr/share/doc/anacron/README.gz содержит немного больше информации, чем содержится в справочных страницах.

ПРИМЕРЫ

Для простых «ежедневных», «еженедельных», «ежемесячных» заданий поместите копию или символическую ссылку на скрипт в один из каталогов /etc/cron. enjdaily|weekly|monthly} выше. Anacron позаботится о том, чтобы запускать его ежедневно / еженедельно / ежемесячно, и если ваш компьютер выключается в тот день, когда обычно запускаются «еженедельные» сценарии, он запускает их при следующем включении компьютера.

В качестве другого примера, при условии, что у вас есть скрипт здесь: /usr/local/sbin/maint.sh

И вы хотите запускать его каждые три дня, стандартная запись в / etc / crontab будет выглядеть так:

# m h dom mon dow user  command
0 0 */3 * * root /usr/local/sbin/maint.sh

Если ваш компьютер не был включен в 00:00 3-го числа месяца, задание не будет работать до 6-го числа.

Чтобы задание вместо этого выполнялось 4-го числа, когда компьютер выключен и «пропускает» запуск 3-го, вы должны использовать это в / etc / anacrontab (не забудьте удалить строку из / etc / crontab):

# period delay job-identifier command
3 5 maint-job /usr/local/sbin/maint.sh

«Задержка» в «5» выше означает, что anacron будет ждать 5 минут, прежде чем запустит эту работу. Идея состоит в том, чтобы предотвратить запуск Anacron сразу во время загрузки.

Джефф
источник
5
По умолчанию Ubuntu использует anacron.
3dinfluence
1
спасибо, 3dincluence - скорректированный ответ, чтобы указать, какие crontabs обрабатываются anacron в стандартном Ubuntu setip.
Джефф
2
если вы поместите скрипт в /etc/cron.*/ вместо того, чтобы иметь собственную запись в crontab, не используйте "." в имени файла сценария. Debian и Ubuntu используют run-parts для запуска таких сценариев, и по умолчанию run-parts игнорирует файлы с символом. в имени файла - это так, что он не запускает версии сценариев .dpkg-old и .dpkg-dist, которые переименовываются из обновлений. поэтому назовите скрипт или символическую ссылку "maint", а не "maint.sh".
Cas
OpenSUSE использует cronie по умолчанию с 11.2 и далее (до Tumbleweed / Leap 42.2 в настоящее время). Чтобы использовать anacron, установите cronie-anacronпакет.
Palswim
13

Это зависит от того, какой планировщик cron вы используете. Базовый демон cron не будет запускать задачи, которые были пропущены из-за простоя системы. Тем не менее, есть другие планировщики cron, специально разработанные для этой ситуации, которые сделают это для вас. Два наиболее распространенных примеров Anacron и Fcron .

Тайлер МакГенри
источник
5

Задачи, запланированные при выключенном компьютере, не будут выполняться при включении компьютера

Алан Х
источник
2

Если вы завершаете работу во время выполнения заданий cron, система выключается, и задания cron останавливаются (или не запускаются).

Одна из альтернатив, которую вы можете проверить, - это анакрон.

KPWINC
источник
2

На самом деле зависит от cron deamon, которым вы управляете. Vixie-cron будет просто пропускать упущенные cronjobs. fcron будет запускать пропущенные кроны, как только сможет. IIRC также основан на vixie-cron, поэтому, если это то, что вы ищете, вы можете попробовать fcron.

gregf
источник