2.11.10. Нестандартные задачи cron
В рамках cron-задач реализовать какой-либо нестандартный интервал или с указанием ожидания выполнения другой команды невозможно. Сам по себе crontab может использовать расписание только с точностью до минуты, при этом указать определённое количество секунд нельзя. Также задачи не могут запускаться по порядку выполнения, то есть ожидая, пока закончится предыдущая задача и после запускать следующую. Для реализации подобного можно воспользоваться полезными возможностями bash.
Запуск последовательных команд
Для последовательного запуска двух команд необходимо указать в задаче обе команды, разделив их символом ;
. Подобное указание будет работать как выполнение очередности команд вида:
command1 ; command2 ; ... ; commandn
Выполнение следующей команды произойдет в любом случае, даже если предыдущая вернула ошибку.
Если же необходимо проверять наличие ошибки или успешного выполнения предыдущей команды, то можно воспользоваться следующими делителями:
&&
— выполнить следующую команду только в том случае, если предыдущая была выполнена успешно.||
— выполнить следующую команду только в том случае, если предыдущая НЕ была выполнена успешно и вернула ошибку.
Пример использования следующий:
command1 ; command2 && command3 || command4
Выполняться команды будут в следующем порядке и условиях: command1
и command2
будут выполнены в любом случае, но command3
будет выполнена только при условии, если command2
выполнена без ошибок. command4
выполнится только в том случае, если при выполнении command3
будет возвращена ошибка.
Запуск задач с точностью до секунды
Важные моменты:
- cron-задачи не запускаются в самом начале минуты, довольно часто задача может быть запущена на первых секундах минуты или позже, в связи с чем указать точное время запуска проблематично.
- Не стоит задавать слишком большое значение для ожидания, так как время выполнения команды ограничено, в рамках виртуального хостинга максимальное время выполнения процесса равно 1 часу, для бизнес хостинга это значение равно 4 часам.
- Настоятельно не рекомендуем использовать задачи с крайне маленьким интервалом запуска, так как это чревато чрезмерным потреблением серверных ресурсов, а также является нарушением условий предоставления услуг п. 5.8.
Как было указано ранее — crontab не имеет возможности настройки выполнения в точности до секунды, в связи с чем приходится прибегать к разным ухищрениям, например указание последовательного выполнения нескольких команд с использованием команды ожидания. К примеру следующая команда будет запущена через 30 секунд после ее выполнения:
sleep 30 ; command1
Если необходимо запустить две задачи в начало минуты и в 30 секунд той же минуты, то следует добавить две задачи с одинаковым интервалом, но в одну из них указать sleep 30 ; command1
, где command1
необходимая к выполнению задача. В таком случае выполнение второй задачи будет отложено на 30 секунд.