Вход на сайт
Яндекс.Метрика

Рейтинг@Mail.ru

Как запретить двойной запуск cron задач?

Администрируя нагруженные проекты, возникает проблема повторного запуска cron задач, т.е. когда во время выполнения одного скрипта, cron запускает второй такой же скрипт. Такие ситуации порой приводят к некорректным результатам работы скрипта и другим проблемам (зависит от самого скрипта).

Как запретить двойной запуск cron задач?
Самое простое в Linux, что можно придумать это воспользоваться утилиткой flock.
Утилита принимает имя лок-файла и команду для выполнения. Как он работает: flock ставит лок на указанный файл и если лок поставлен успешно, тогда запускает указанную команду.

Итого имеем:

* * * * * /usr/bin/flock -n /tmp/email.lock -c "/usr/bin/perl /home/zvonilka/send_email3.pl" >> /var/log_email 2>&1
* * * * * (sleep 30; /usr/bin/flock -n /tmp/email.lock -c "/usr/bin/perl /home/zvonilka/send_email3.pl" >> /var/log_email 2>&1)

Кстати, тут еще показано как просто можно научить cron запускать задачу каждые 30 секунд.

unix-way