Как выполнять задание cron каждые 72 минуты

Как мне запустить задание cron каждые 72 минуты? Или какой-то не очень красивый номер, как этот?


person Community    schedule 14.04.2009    source источник
comment
Почему должно быть 72 минуты?   -  person Zifre    schedule 14.04.2009
comment
Не обязательно, просто что-то нехорошее четное число.   -  person    schedule 14.04.2009


Ответы (7)


Поскольку cron запускает задания на основе времени, а не интервала, не существует невероятно простого способа сделать это. Однако, несмотря на то, что это немного хак, вы можете настроить несколько строк в crontab, пока не найдете общий знаменатель. Поскольку вы хотите, чтобы задание выполнялось каждые 72 минуты, оно должно выполняться в следующие моменты времени:

  • 00:00
  • 01:12
  • 02:24
  • 03:36
  • 04:48
  • 06:00
  • 07:12
  • ...

Как видите, шаблон повторяется каждые 6 часов с 5 заданиями. Итак, у вас будет 5 строк в вашем crontab:

0  0,6,12,18  * * * command
12 1,7,13,19  * * * command
24 2,8,14,20  * * * command
36 3,9,15,21  * * * command
48 4,10,16,22 * * * command

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

person lc.    schedule 14.04.2009

Используйте at (человек at). Пусть ваше приложение или сценарий запуска рассчитает время запуска через 72 минуты и запланирует повторный запуск, прежде чем оно начнет работать.

Доступно также в Windows XP и Vista.

Вот пример для gnu/linux: at -f command.sh сейчас + 72 минуты

person Chris    schedule 14.04.2009
comment
s/запланировать его/запланировать повторный запуск/ - person Dennis Williamson; 19.04.2009
comment
Надеюсь, это станет принятым ответом. После запуска задания оно может перепланироваться каждый раз при запуске. Однако вы можете обнаружить, что теряете синхронизацию; поэтому убедитесь, что вы перепланировали свою работу на первое место в своем сценарии, а не на последнее. - person Adam Hawes; 24.04.2009

Вы всегда можете использовать подход, запускающий cron каждую минуту, и ваш скрипт немедленно завершает работу, если он был запущен позже, чем 72 минуты назад.

person ceejayoz    schedule 14.04.2009

Не используйте крон...

#!/bin/sh
while [ true ] 
do
     sleep 4320
     echo "Put your program here" &
done
person PaulB    schedule 23.04.2009
comment
Будьте осторожны, если программа вылетит, вам нужно будет перезапустить ее. Также после перезагрузки машины программа не будет запущена, ее придется запускать. - person Adrian Smith; 07.01.2011
comment
Да, лучше сделать его демоном и использовать, например, monit, чтобы он продолжал работать. - person mahemoff; 08.04.2013

Вы не можете сделать это напрямую из cron/crontab.

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

Одним из вариантов может быть составление расписания, которое приблизительно соответствовало бы вашим «каждым 72 минутам», запустив его в полночь, 1:12, 2:24, 3:36, ..., и растянув его примерно до полуночи. В вашем файле crontab все это время может быть указано как время выполнения.

Другой альтернативой может быть отдельное приложение, обрабатывающее планирование и запускающее ваше приложение.

person Reed Copsey    schedule 14.04.2009

Для этого нужно поставить ровно 20 задач — т.е. поставить одну на 00:00, следующую на 01:12, следующую на 02:24 и т. д.

20 итераций составляют полный день.

К сожалению, это единственный способ сделать это, т.к. задачи cron заранее настраиваются по фиксированному расписанию, а не запускаются, скажем, "через X минут была выполнена последняя задача".

person Seb    schedule 14.04.2009

Э-э, я знаю, что это давно назрело, но я просматривал некоторые проблемы с расписанием и увидел этот вопрос.

Просто сделайте это в своем crontab

*/72 * * * * /home/script.sh

person Mark    schedule 04.08.2009
comment
Это не сработает, минуты от 0 до 59, и все, что превышает 30 минут, будет публиковаться в x прошедшем, т.е. 34 будет публиковаться через 34 минуты, а не каждые 34 минуты. - person omega1; 20.09.2016
comment
Я только что проверил это, и результат */72 * * * * date >> cron-over-72.out под CentOS 7: задание выполняется один раз в час, в час. - person CODE-REaD; 06.02.2020