Назад | Перейти на главную страницу

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

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

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

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

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

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

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

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

оставив оставшиеся crontab для обработки главному демону 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.{daily|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 во время загрузки.

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

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

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

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

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