@swim3r

Как сделать условия для cron задачи?

Добрый день уважаемые знатоки.
Помогите решить такую проблему. Есть скрипт автоматизации развертывания виртуального хоста. На нем должен запускаться скрипт. Но выполнение этого скрипта прерывает cron задачей.
Задача такого типа
*/10 * * * * root timeout -k 1m 10m 900 ansible-pull $OPTS

Можно ли добавить к этой задаче какое нибудь условие, типа [ ps fax || grep "процесс" -eq 0 ], что бы проверить выполнение скрипта, и если он еще выполняется, то не запускать cron задачу.
Например что бы получилось так:
*/10 * * * * root [ условие ] || timeout -k 1m 10m 900 ansible-pull $OPTS


PS. видимо я вопрос задал не правильно. Интересует именно какое сделать условие. То что написал я не работает.
PPS. склоняюсь к тому, что проще добавить какой нибудь проверочный файл в конец скрипта, и если он есть, то запускать крон. Опытные люди сказали, что вариант с ps и grep не очень надежный.
  • Вопрос задан
  • 799 просмотров
Пригласить эксперта
Ответы на вопрос 3
ky0
@ky0
Миллиардер, филантроп, патологический лгун
А в одно задание крона эти две операции нельзя поместить?

В целом, разумеется, можно проверять наличие процесса. Я бы написал небольшой скрипт, который перед началом создавал lock-файл, а в конце - удалял или переименовывал его.
Ответ написан
zoroda
@zoroda
Необычный Fullstack
Можно.
У меня в кронтабе такая строчка:
50 5 * * *    /opt/calend/isworkday.sh && /bin/bash /opt/media/play.sh

Проверяет, рабочий ли сегодня день, если да, то запускает музыку в качестве будильника
Ответ написан
Комментировать
saboteur_kiev
@saboteur_kiev Куратор тега Linux
software engineer
*/10 * * * * root [ условие ] || timeout -k 1m 10m 900 ansible-pull $OPTS


Все должно работать, главное правильно задать условие.

ps fax || grep "процесс" -eq 0
не должно срабатывать в вашем случае, так как крон запускает ps без терминала, и от имени root юзера - не факт, что fax процессы при этом отобразятся. Можете просто в кроне поставить ps fax > $HOME/temp.txt и посмотреть в списке процессов результат.
То есть вам нужно или ps -xa или, что еще лучше, сделать проверку по PID файлу (скрипт должен это уметь).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы