hosting:cron:irregular

2.11.10. Нестандартные задачи cron

В рамках Cron задач реализовать какой-либо нестандартный интервал или с указанием ожидания выполнения другой команды невозможно. Сам по себе crontab может использовать расписание только с точностью до минуты, при этом указать определенное количество секунд нельзя. Также задачи не могут запускаться по порядку выполнения, то есть ожидая, пока закончится предыдущая задача и после запускать следующую. Для реализации подобного можно воспользоваться полезными возможностями bash.

Чтобы запустить две команды последовательно, необходимо указать в задаче обе команды разделив их символом ;. Подобное указание будет работать как выполнение очередности команд вида:

command1 ; command2 ; ... ; commandn

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

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

  • && — выполнить следующую команду только в том случае, если предыдущая была выполнена успешно.
  • || — выполнить следующую команду только в том случае, если предыдущая НЕ была выполнена успешно и вернула ошибку.

Пример использования следующий:

command1 ; command2 && command3 || command4

Выполняться команды будут в следующем порядке и условиях: command1 и command2 будут выполнены в любом случае, но command3 будет выполнена только при условии, если command2 выполнена без ошибок. command4 выполнится только в том случае, если при выполнении command3 будет возвращена ошибка.

Важные моменты

  • Cron задачи не запускаются в самом начале минуты, довольно часто задача может быть запущена на первых секундах минуты или позже, в связи с чем указать точное время запуска проблематично.
  • Не стоит задавать слишком большое значение для ожидания, так как время выполнения команды ограничено, в рамках виртуального хостинга максимальное время выполнения процесса равно 300 секундам (5 минут), для бизнес хостинга это значение равно 4 часам.
  • Настоятельно не рекомендуем использовать задачи с крайне маленьким интервалом запуска, так как это чревато чрезмерным потреблением серверных ресурсов, а также является нарушением условий предоставления услуг п. 5.8.

Как было указано ранее — crontab не имеет возможности настройки выполнения в точности до секунды, в связи с чем приходится прибегать к разным ухищрениям, например указание последовательного выполнения нескольких команд с использованием команды ожидания. К примеру следующая команда будет запущена через 30 секунд после ее выполнения:

sleep 30 ; command1

Если необходимо запустить две задачи в начало минуты и в 30 секунд той же минуты, то следует добавить две задачи с одинаковым интервалом, но в одну из них указать sleep 30 ; command1, где command1 необходимая к выполнению задача. В таком случае выполнение второй задачи будет отложено на 30 секунд.

  • hosting/cron/irregular.txt
  • Последнее изменение: 2021/01/12 12:54
  • karlov