Демонизация скриптов и приложений
Бывает необходимо запускать некие скрипты или приложения, которые будут крутиться все время. Раньше запускалось и висело в jenkins'e, но при отмене задачи скрипты продолжали работать. И главное при падении оно должно перезапускаться, я надумал 2 решения.
Первое - это самописный костыль, который проверяет состояние и если не запущен запускает, висящий в cron'e. Второе - использование supervisord, который позволяет демонизировать все что угодно.
Из ништяков у него есть веб-интерфейс для управления запущеными «демонами», но я его не щупал так как у меня для этих целей есть jenkins.
В первом случае необходим скрипт для запуска и остановки нужного приложения, можно взять тут и ко всему задание в jenkins'e для запуска и остановки. Что касается перезапуска в случае падения, то есть такой костыль:
/usr/src/ref.sh
/etc/zabbix/zabbix_agentd.d/userparameter_process.conf
/etc/supervisor/conf.d/script.conf
Для управления запущеными сервисами есть supervisorctl.
Еще есть restart, tail и прочее, подробней в доках.
В первом случае необходим скрипт для запуска и остановки нужного приложения, можно взять тут и ко всему задание в jenkins'e для запуска и остановки. Что касается перезапуска в случае падения, то есть такой костыль:
/usr/src/ref.sh
#!/bin/sh name="script" path="/etc/init.d/" pr1=`pgrep -f "argument"` if [ "$pr1" ] then echo "Ok"; else echo "start... \n"; echo `$path$name start`; fiСкрипт, который я запускал, запускается с передачей аргументов типа:
php /root/script.php argumentЕсли нужен мониторинг на наличие запущеного процесса можно в zabbix-agent добавить:
/etc/zabbix/zabbix_agentd.d/userparameter_process.conf
UserParameter=proc.status[*],pgrep -f $1 | wc -lДля проверки с сервера выполнить команду, предварительно перезапустив агент
zabbix_get -s example.com -k proc.status[argument]C supervisor все проще, и он есть в репе или можно установить используя pip. Я поставил с реп и создал конфиг файл нужного мне скрипта
/etc/supervisor/conf.d/script.conf
[program:script] command=php /root/script.php argument stdout_logfile=/var/log/supervisor/script.log stderr_logfile=/var/log/supervisor/script-error.log redirect_stderr=true autostart=true autorestart=true startsecs=5
/etc/init.d/supervisor start
запускает все что у него есть.Для управления запущеными сервисами есть supervisorctl.
supervisorctl start script
supervisorctl stop script
supervisorctl status
Еще есть restart, tail и прочее, подробней в доках.