it-swarm-ru.tech

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

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

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

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

92
seg.server.fault

Когда ваш компьютер выключен (или демон 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 сразу во время загрузки.

76
jeff

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

17
Tyler McHenry

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

6
Alan H

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

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

3
KPWINC

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

3
gregf