Перезапуск сценария оболочки с &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
при условии, что есть изящный способ остановить скрипт.