Назад | Перейти на главную страницу

Cron-задания в каскадном массиве

Если кто-то похож на меня и хоть раз работал с пакетными заданиями IBM Mainframe, то, возможно, вы знаете CONTROL-M, это инструмент для планирования заданий не только по дате и времени, но и с точки зрения условности основаны на успехе или неудачах других работ

Поэтому мне интересно, возможно ли это на Linux-машине с сервером cron. Единственный способ узнать, должно ли это задание cron выполняться в определенную дату и время, теперь я хочу запустить в цепочке других заданий cron. Скажите так, что когда один финиш вызывает запуск другого и так далее.

Есть ли способ добиться этого?

Бест, Демиан

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

Вот один недавно замеченный пример хакерства:

### Start SSH if it stops. 
*/8 * * * * /usr/lib/nagios/plugins/check_ssh -p 22 10.0.0.34 > /dev/null || /etc/init.d/sshd restart

Вышеупомянутое будет запускать команду «/etc/init.d/sshd restart» только в том случае, если первоначальная команда не удалась. Это именно то, что вы ищете. Я полагаю, что это только на этом мэйнфрейме, потому что он дублирует простые условные операторы, которые существуют практически в каждой оболочке.

Если у вас есть целая куча «заданий», которые следует запускать ТОЛЬКО в случае сбоя первого ... тогда просто поместите все эти задания в сценарий оболочки и начальную команду в cron:

# Run my cool script if "somecommand" fails.
*/8 * * * * /usr/bin/somecommand || /home/foo/bin/mycoolscript.sh

Для bash && и || встроенные подойдут.

Или вы можете установить сервер планирования: "планировщик заданий" - хороший проект под GPL на Sourceforge.