У меня есть сценарий оболочки, который запускает внутреннюю почтовую систему 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 для решения этой проблемы :)
Не используйте отрицание ...
Я не знаю полного содержимого сценария, но вам действительно стоит попробовать использовать файл 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
, при условии, что есть изящный способ остановить скрипт.