Что было бы хорошим решением, если бы пара аварийного переключения, в которой запущено несколько cronjobs, не запускала процессы дважды?
Либо при аварийном переключении, либо путем разделения заданий между ними, и, конечно же, возможность взять на себя все задания при выходе из строя одного из узлов.
Я мог бы написать для этого сценарий, но, должно быть, кто-то уже исправил это, или это такой необычный запрос?
Если у вас есть какое-то кластерное решение для обеспечения высокой доступности, сделать это довольно просто.
Мы настраиваем все задания cron на обоих (или на всех) узлах кластера. Каждое задание начинается с выполнения небольшого сценария, который определяет, является ли этот узел главным в кластере (проверяя плавающий IP-адрес кластера). Если это не главный узел, сценарий check_for_master завершается с ошибкой, которая приводит к сбою всего задания cron. Если этот узел является главным, сценарий check_for_master выполняет задание как обычно.
Содержимое скрипта check_for_master действительно зависит от того, какое программное обеспечение кластера вы используете, и используемую вами ОС.
Например, вот образец записи crontab:
00 04 * * * /usr/local/bin/check_for_master /usr/local/bin/program-you-want-to-run >/tmp/logfile.out 2>&1
Ты можешь использовать 'rcron'для этой конкретной проблемы. Rcron предлагает вам файл состояния, в котором просто написано «активный» или «пассивный», и если он активен, ваш cron будет работать на определенной машине. Если файл состояния установлен в пассивный режим, он не запустится. Просто как тот.
Ваши задания cron, которые раньше выглядели так:
* * * * * root echo "foobar"
необходимо будет изменить на:
* * * * * root rcron echo "foobar"
и это все.
Я думаю, что вы ищете, скорее, какую-то систему планирования заданий (которая используется в вычислительных кластерах). Конечно, большая часть этого вам не понадобится, но настройка cron для выполнения того, что вам нужно, вероятно, требует больше усилий, чем оценка такого инструмента.