If I add something to cron as a weekly job, will it not run unless my computer is on at that very exact time?

Допустим, я делаю это:

0 0 0 * * somejob

Будет ли это выполняться в установленную дату, и если мой компьютер не будет установлен на эту дату, он пропустит эту неделю?

Допустим, я поставил эту работу прямо сейчас. И тогда мой компьютер выключается на 5 дней от ноу на весь день.

Обычно мне нужно что-то запускать каждую неделю, но мой компьютер может не работать круглосуточно.

2 ответа

Решение

Ага, cron будет запускать задание, запланированное на определенное время, только если компьютер включен в это время. Он работает так, что каждую минуту он проверяет все запланированные задания cron, чтобы увидеть, соответствуют ли их поля времени текущей минуте, и если да, то запускает задание. Если нет, он пропускается. Нет концепции "сохранения" выполнения задания на более позднее время.

В вашей ситуации вы можете использовать файл маркера, чтобы указать последний раз, когда задание было запущено. Создайте небольшой скрипт или программу, которая выглядит следующим образом (это синтаксис псевдо-Bash):

if (marker file was last modified > 1 week ago); then
    run the job
    touch marker file
fi

и вы можете установить этот сценарий как задание cron, которое будет запускаться каждый день, каждый час или даже каждую минуту - так часто, как вам нужно, чтобы он запускался хотя бы раз в неделю в течение времени, когда у вас включен компьютер.

Anacron, скорее всего, то, что вы ищете:

Anacron является периодическим планировщиком команд. Он выполняет команды с интервалами, указанными в днях. В отличие от cron, он не предполагает, что система работает непрерывно.

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