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