У меня есть сценарий bash (который я конвертирую в perl), который работает в бесконечном цикле (while true; do
) для опроса устройств в нашей сети и регистрации их ответов на текстовый файл , С каждой итерацией цикла (while
) текстовый файл для этого устройства добавляется с его последней информацией.Watchdog-подобная поддержка (bash perl или python)
Я бы хотел, чтобы этот скрипт всегда запускался - если он зависает, сбой или больше не записывается в соответствующие текстовые файлы, его следует перезапустить.
Следуя советы, публикуемых в this StackOverflow вопроса, я мог бы написать следующий Баш скрипт:
until myserver; do
echo "Server 'myserver' crashed with exit code $?. Respawning.." >&2
sleep 1
done
где myserver
является программой опроса. Это будет учитывать проблемы с неожиданным сбоем или зависанием сценария, предполагая, что в этих случаях был выпущен ненулевой код выхода. Однако, если сценарий не полностью завершает работу/завершает работу, но выходит из строя таким образом, что он просто перестает писать текстовые файлы - я тоже хотел бы перезапустить скрипт. Вот где бы появился скрипт, похожий на сторожевой. Я мог использовать Python watchdog
и написать сценарий, который использует библиотеку Observer
для отслеживания генерируемых текстовых файлов, like in this example. Я хотел бы вызвать на застойных текстовые файлы выдать ненулевой выход для сценария питона, а затем дополнить вышеуказанный Баш скрипт следующим образом:
until [myserver -o pythonMon]; do
echo "Server 'myserver' crashed with exit code $?. Respawning.." >&2
sleep 1
done
где pythonMon
является сценарием питона мониторинга или не обновляют текстовые файлы должным образом. К сожалению, для этого подхода требуются три сценария (основной сценарий опроса и два сценария мониторинга); это немного клочья. Я ищу для оптимизации/упрощения этого подхода. Любые рекомендации? В идеале у меня был бы один скрипт (по крайней мере один сценарий мониторинга), чтобы поддерживать скрипт опроса против двух. Будет ли способ добавить мониторинг файлов непосредственно в bash или perl-код? Это работает на 64-разрядной версии, CentOS 6.5
Я предполагаю, что между опросами есть какая-то пауза. Как насчет того, чтобы вырезать цикл из вашей программы, чтобы он только один раз запрашивал оборудование, записывал результат и выходил.Затем вы можете запустить его как задание «cron», которое будет работать с одинаковой частотой, и вопрос о перезапуске не возникает. Все, что происходит, если опрос проваливается, состоит в том, что в последовательности данных отсутствует запись. – Borodin
@Borodin есть пауза, но опрос происходит каждые 10 секунд, поэтому задание cron не будет работать, так как он разрешает выполнение скрипта один раз в минуту (требуется 10 секунд). – secJ
Тогда ваша программа Perl должна «развить» дочерний процесс Perl каждые десять секунд, и пусть это сделает опрос. Родительский процесс может «убить» и собрать последний ребенок до появления нового, хотя ваше требование перезапустить * «если [процесс] больше не записывается в соответствующие текстовые файлы» *, это немного беспокоит. Какую ошибку вы представляете здесь, и как ее можно протестировать? Я бы написал ответ с некоторым примером кода, но сейчас я использую планшет и ничего не могу проверить. – Borodin