Демонизация скриптов и приложений
Бывает необходимо запускать некие скрипты или приложения, которые будут крутиться все время. Раньше запускалось и висело в 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 scriptsupervisorctl stop scriptsupervisorctl statusЕще есть restart, tail и прочее, подробней в доках.