Перезапуск сценария оболочки с &disown с помощью Monit

У меня есть сценарий оболочки, который запускает серверную почтовую систему C++ (PluginHandler). Мне нужно контролировать этот процесс в Monit и перезапустить его, если он не работает.

Сценарий:

export LD_LIBRARY_PATH=/usr/local/lib/:/CONFIDENTAL/CONFIDENTAL/Common/
cd PluginHandler/
./PluginHandler

Этот скрипт не имеет файла PID, и мы запускаем этот скрипт, выполняя

./rundaemon.sh &disown

./pluginhandler запускает процесс и начинает входить в /etc/output/output.log Я прекращаю процесс, идентифицируя идентификатор процесса с помощью [ps -f | grep PluginHandler], а затем убивает процесс.

Я могу проверить процесс в Monit просто отлично, но я думаю, что Monit запускает процесс, если он не запущен, но он не может выполнить и отключиться, поэтому процесс заканчивается сразу же после его запуска.

Это код в файле monitrc для проверки этого процесса:

check process Backend
matching "PluginHandler"
if not exist
then alert
start "PATH/TO/SCRIPT/rundaemon.sh &disown"
alert example@gmail.com only on {timeout} with mail-format {subject: "[BLAH"}

Я попытался остановить завершение сценария, изменив сценарий, как показано ниже, но это тоже не работает.

export LD_LIBRARY_PATH=/usr/local/lib/:/home/CONFIDENTAL/production/CONFIDENTAL/Common/
cd PluginHandler/
(nohup ./PluginHandler &)
return

Любая помощь в написании правильных правил Monit для решения этой проблемы будет принята с благодарностью:)

1 ответ

Не используйте отречься...

Я не знаю полного содержания скрипта, но вам следует действительно попытаться использовать файл PID, если это возможно. Но вы можете использовать Monit для запуска и остановки процесса независимо.

check process Backend
        matching "PluginHandler"
        start program = "/path/to/rundaemon.sh" as uid user
        stop program = "/usr/bin/pkill -f PluginHandler"

Одно это обеспечит работоспособность процесса. Возможно, вы захотите что-то более конкретное в "соответствующей" строке. Тест с monit procmatch <string> чтобы увидеть, что обнаружит Monit. Он будет отслеживать только первое вхождение соответствующего процесса.

Вы можете начать процесс с monit start Backend и остановить это с monit stop Backendпри условии, что есть изящный способ остановить скрипт.

Другие вопросы по тегам