У меня есть сценарий оболочки, который выполняет почтовую систему бэкенда 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 запускает процесс, если он не работает, но он не может сделать &disown так концы процесса, как только он запускается.
Это - код в 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
, чтобы увидеть, что Monit обнаружит. Вы можете запустить процесс с помощью монитора Backend
и остановить его с помощью монитора Backend
, при условии, что есть изящный способ остановить скрипт.