Управление демонами с помощью Upstart и Supervisor в Ubuntu 14.04

Категория: Linux

Руководство по управлению демонами в Ubuntu 14.04 с помощью утилит Upstart и Supervisor. В мануале мы будем контролировать демон обработки Artisan очередей (Laravel 4.2). Предположим, что нам необходимо запустить фоновый сервис (демон) и поддерживать его в рабочем состоянии, т.е. перезапускать в случае сбоя или по требованию.

Внимание!

Обратите внимание также на супервизор сервисов runit (http://habrahabr.ru/post/83775/). Он не вошел в это руководство из-за нехватки времени.

Supervisor

Это утилита написана на Python и предназначена для управления процессами ОС. Мы рассмотрим только отслеживание состояния демонов (фоновых сервисов) и их перезапуск в случае необходимости. Тулза предоставляет системный и web интерфейсы для управления сервисами (демонами).

Установка на Ubuntu 14.04 тривиальна:

sudo apt-get install supervisor

После установки вам будет доступен сервис supervisor (его демон supervisord) со всеми возможностями контроля: status, start, restart, stop. А также консольная утилита для управления наблюдаемыми демонами - supervisorctl.

Проверим статус сервиса supervisor:

sudo service supervisor status

Для запуска WEB GUI интерфейса создайте файл конфигурации /etc/supervisor/conf.d/web-gui.conf (или добавьте эту секцию в /etc/supervisor/supervisord.conf):

[inet_http_server]
port=127.0.0.1:9001
username=YOUR_USER    ; Данные для HTTP Basic Authentication
password=YOUR_PASS



Примерно так выглядит web-морда супервайзера


Создаем файл конфигурации сервиса, который будет следить за нашим демоном очередей (/etc/supervisor/conf.d/my_app_queue.conf):

[program:my_app_queue]
directory=/var/www/my_app
command=php artisan queue:listen --timeout=720 --tries=3 --env=production
autostart=true
autorestart=true
stderr_logfile=/var/log/supervisor/my_app_queue.err.log
stdout_logfile=/var/log/supervisor/my_app_queue.out.log
Внимание!

После добавления/редактирования конфигурации нового сервиса необходимо "перечитать" конфиги:

sudo supervisorctl reread
sudo supervisorctl update

или перезапустить сервис supervisor:

sudo service supervisor restart

Консоль supervisorctl предоставляет возможность управлять запущенными демонами:

$ sudo supervisorctl
supervisor> status
supervisor> restart SERVICE-NAME  # перезапуск демона
supervisor> stop SERVICE-NAME     # будет остановлен сервис и сам слушатель artisan
supervisor> help
supervisor> quit

Также, вы можете управлять сервисами без входа в консоль supervisorctl, но вы не получите дополнение имен сервисов в консоли:

sudo supervisorctl restart SERVICE-NAME

Вот, собственно, и все... Теперь supervisor будет контролировать чтобы обработчик Laravel очередей всегда был запущен. Если желаете узнать побольше о возможностях supervisor, рекомендую к прочтению статью: http://adw0rd.com/2012/11/2/python-supervisor/

Upstart

Эта утилита также предоставляет контроль за демонами и возможность реагировать на события системы. Утилита Upstart включена в дистрибутивы Ubuntu по-умолчанию, поэтому под Ubuntu вроде как и нет особого смысла ставить supervisor.

Создаем файл конфигурации сервиcа /etc/init/my-app-queue-caretaker.conf:

#!upstart

description "Run the Laravel Queues Caretaker"

start on runlevel [2345]
stop on runlevel [!2345]

console output
env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

cd /project/dir && php artisan queue:work --daemon

respawn
Внимание!

После добавления нового файла конфигурации сервиса необходимо перечитать конфиги:

sudo initctl reload-configuration

Каждый конфиг upstart сервиса должен содержать либо script (набор sh команд) либо  exec (одно строчная команда для запуска исполняемого файла).

Всеми сервисами upstart управляет утилита initctl.

Имя сервиса будет соответствовать имени файла конфигурации без расширения .conf

Например, для запуска сервиса my-app-queue-caretaker выполните:

sudo initctl start my-app-queue-caretaker
# или через алиас:
sudo start my-app-queue-caretaker

Логи upstart сервисов лежат в /var/log/upstart/%service-name%.log.

Команды управления:

sudo initctl start MY_SERVICE (или просто - start MY_SERVICE)     запускает сервис MY_SERVICE
sudo initctl stop MY_SERVICE (или просто - stop MY_SERVICE)     запускает сервис MY_SERVICE

#daemon, #services, #supervisord, #upstart, #background tastk

категория: Linux