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, он не предполагает, что система работает непрерывно.