
2024-05-10
Supervisord настройка и синтаксис
2023-11-17
Часто в разработке помимо разовых запусков скриптов или запуска скриптов по расписанию требуется, чтобы скрипт работал на постоянной основе. Такие скрипты называются демонами. Но эти скрипты не могут работать в вакууме, так как просто запустив их в консоли, даже если отвязать консоль от процесса, то получится так, что процесс бесхозный и за ним никто не следит. В случае, если он отвалится - вам придется идти на сервер и ручками его поднимать. Чтобы автоматизировать эту работу есть простейший инструмент - supervisor. Он имеет довольно простой синтаксис и поддерживается на подавляющем большинстве дистрибутивов линукс.
Устанавливается супервизор предельно просто всего одной командой:
sudo apt install supervisor
Чтобы программа работала постоянно и запускалась при запуске системы можно выполнить команду:
sudo systemctl enable supervisor --now
Посмотреть состояние супервизора можно следующим образом:
sudo systemctl status supervisor
У супервизора есть конфигурационный файл и конфигурационная директория куда вы можете добавлять отдельные файлы конфигураций, чтобы не держать все конфиги в одном файле.
Основной файл располагается по пути /etc/supervisor/supervisord.conf
Директория располагается тут: /etc/supervisor/conf.d/ В этой директории можно например создать файл rabbit_mq.conf и в нем можно прописать конфигураци следующим образом:
Для каждого процесса минимально надо передать такие переменные для того чтобы он автоматически запускался и восстанавливался после падения:
-- directory - рабочая директория;
-- command - команда запуска процесса;
-- user - пользователь, от имени которого будет запущен процесс;
-- autostart - нужно ли автоматически запускать процесс;
-- autorestart - нужно ли перезапускать процесс;
Однако доступных настроек намного больше, вот некоторые из тех, которые будут рассмотрены в данной статье:
-- priority - приоритет запускаемого процесса;
-- environment - переменные окружения, которые надо передать процессу;
-- stdout_logfile - куда перенаправлять вывод stdout процесса;
-- stderr_logfile - куда перенаправлять вывод stderr процесса;
-- process_name - название процесса, с возможностью подстановки номера копии;
-- numprocs - количество запускаемых копий процесса;
-- startretries - количество попыток запустить программу;
-- redirect_stderr - перенаправить вывод ошибок процесса в вывод supervisor;
-- redirect_stdout - перенаправить вывод процесса в вывод supervisor;
-- startsecs - через сколько секунд после падения необходимо запустить процесс снова;
Давайте рассмотрим пример запуска демона rabbitmq из-под супервизора для Symfony фреймворка.
[program:smsnotificationprocessor]
command=/*/*/*/bin/console rabbitmq:consumer sms_notification_processor
numprocs=3
process_name=%(program_name)s_%(process_num)02d
user=test_portal_user
autostart=true
autorestart=true
startsecs=0
Эта настройка говорит нам о том, что будет запускаться команда bin/console rabbitmq:consumer ( пути нужно указывать от корня сервера ). Таких процессов будет 3 штуки. Запускаться они будут из-под пользователя test_poratl_user ( стественно нужно указывать того пользователя из-под которого настроена работа с кроликом у вас на продукте ), также видим настройки autostart и autorestart влюченные в true. Они означают, что в случае, если процесс будет падать - то супервизор будет его сам переподнимать и запускать снова.
После добавления или редактирования конфигурации необходимо перезапустить супервизор одной из команд:
sudo systemctl restart supervisor
sudo supervisorctl reload
После чего можно проверить статус процессов, запущенных уже автоматически из-под супервизора:
sudo supervisorctl status
Как видите добавить какой-либо скрипт под супервизор довольно не сложно.
Ура! Я наконец-то дописал статью как собирать собственные бандлы на Symfony 6!!!
Статья про EasyAdmin всё ещё в процессе )))
Не, ну мне же надо на чем-то тестировать твиттер локальный...
Я тут еще много полезного буду выкладывать, так что заходите обязательно почитать.
Сайтик пока что в разработке - это далеко не окончательная версия - по сути это то что удалось слепить за 8 часов.
Комментарии