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

Решения для планирования cronjob

Я установил список cron, некоторые из скриптов cron запускаются долго (например, 1-5 часов, и они увеличиваются с каждым днем). Я не хочу запускать два сценария cron одновременно, поскольку у меня нет ресурсов или необходимости для этого. Мне нужно найти решение, чтобы запланированные сценарии не запускались, пока не завершится другой предыдущий сценарий. У меня в списке 10-15 задач cron, 5 из которых я не хочу перекрывать.

Есть ли у кого-нибудь предложения по поводу того, какое решение я должен искать более внимательно, чтобы достичь своей цели?

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

т.е.

if [ -a lockfile ]; then
exit 0
else
touch lockfile
fi
... rest of code...
rm -f lockfile

B. С помощью этого сценария проверьте, не запущен ли уже другой сценарий, например ps auxwf | grep blabla.

Использование файла блокировки может привести к ситуации, когда ежедневное задание cron не запускается. Вы думали о том, чтобы запускать эти задания из одного задания cron последовательно?

#!/bin/bash/
sh /jobs/somejob1
sh /jobs/somejob2

Я рекомендую запускать тяжелые приложения ввода-вывода последовательно с одного задания

Вы также можете работать с файлами блокировки в PHP. Точно такую ​​же проблему я решил с кодом:

$lockfile='/tmp/'.__CLASS__.'.lock'; // the lockfile should be different for each script
$lock=fopen($lockfile, 'w');
if(!flock($lock, LOCK_EX|LOCK_NB)){
//  $this->log("This process is already started, i'm exiting.");
    exit;
}

Поместите это в начало вашего сценария работы.

Есть пакет lockfile-progs, доступный в любом дистрибутиве, производном от debian (и, возможно, в другом), и он работает.

Та же самая тема поднималась на Sysadvent ранее в этом месяце: http://sysadvent.blogspot.co.uk/2012/12/day-4-zookeeper-for-distributed.html

Вы можете использовать Zookeeper в качестве распределенного диспетчера блокировок для файлов блокировки в кластере машин.