Supervisord система управления процессами в Unix
Supervisord (или Supervisor) — это система управления процессами в Unix-подобных операционных системах. Она позволяет запускать, останавливать, перезапускать и мониторить несколько процессов, что особенно полезно для управления фоновыми задачами, демонами или приложениями, которые должны работать постоянно.
Для чего используется Supervisord?
Supervisord используется для:
- Управления процессами: Запуск, остановка и перезапуск процессов.
- Мониторинга: Автоматический перезапуск процессов, если они завершаются неожиданно.
- Логирования: Перенаправление вывода (stdout и stderr) процессов в файлы логов.
- Управления группами процессов: Запуск и остановка нескольких процессов как группы.
- Интеграции с системами инициализации: Supervisord может быть интегрирован с systemd или другими системами инициализации для автоматического запуска при загрузке системы.
Основные возможности Supervisord
- Автозапуск процессов: Процессы могут быть настроены для автоматического запуска при старте Supervisord.
- Автоперезапуск: Если процесс завершается, Supervisord может автоматически перезапустить его.
- Управление через CLI или веб-интерфейс: Supervisord предоставляет командную строку и веб-интерфейс для управления процессами.
- Логирование: Все выводы процессов (stdout и stderr) могут быть записаны в файлы логов.
- Группы процессов: Процессы могут быть объединены в группы для удобного управления.
Установка Supervisord
Supervisord можно установить через пакетный менеджер в Linux:
- Debian/Ubuntu:
sudo apt update
sudo apt install supervisor
- CentOS/RHEL:
sudo yum install supervisor
После установки Supervisord обычно запускается как демон и управляется через systemd:
sudo systemctl start supervisor
sudo systemctl enable supervisor
Конфигурация Supervisord
Конфигурационные файлы Supervisord находятся в директории /etc/supervisor/
. Основной конфигурационный файл — /etc/supervisor/supervisord.conf
.
Для добавления новых процессов создаются отдельные конфигурационные файлы в директории /etc/supervisor/conf.d/
. Например, файл /etc/supervisor/conf.d/my_app.conf
может содержать следующее:
[program:my_app]
command=/usr/bin/python3 /path/to/my_app.py
directory=/path/to/working/directory
autostart=true
autorestart=true
stderr_logfile=/var/log/my_app.err.log
stdout_logfile=/var/log/my_app.out.log
user=my_user
Управление процессами через Supervisord
- Перезагрузка конфигурации (после изменения конфигурационных файлов):
sudo supervisorctl reread
sudo supervisorctl update
- Запуск процесса:
sudo supervisorctl start my_app
- Остановка процесса:
sudo supervisorctl stop my_app
- Перезапуск процесса:
sudo supervisorctl restart my_app
- Просмотр статуса всех процессов:
sudo supervisorctl status
Пример использования Supervisord
Предположим, у вас есть Python-скрипт, который должен работать постоянно как демон. Вы можете настроить Supervisord для управления этим скриптом:
- Создайте конфигурационный файл
/etc/supervisor/conf.d/my_script.conf
:
[program:my_script]
command=/usr/bin/python3 /path/to/my_script.py
directory=/path/to/working/directory
autostart=true
autorestart=true
stderr_logfile=/var/log/my_script.err.log
stdout_logfile=/var/log/my_script.out.log
user=my_user
- Перезагрузите конфигурацию Supervisord:
sudo supervisorctl reread
sudo supervisorctl update
- Запустите процесс:
sudo supervisorctl start my_script
- Проверьте статус:
sudo supervisorctl status
Веб-интерфейс Supervisord
Supervisord также предоставляет веб-интерфейс для управления процессами. Чтобы включить его, добавьте в конфигурационный файл /etc/supervisor/supervisord.conf
следующие строки:
[inet_http_server]
port = 127.0.0.1:9001
username = your_username
password = your_password
После этого перезапустите Supervisord:
sudo systemctl restart supervisor
Теперь вы можете получить доступ к веб-интерфейсу по адресу http://127.0.0.1:9001
.
Преимущества Supervisord
- Простота: Легко настроить и использовать.
- Надёжность: Автоматический перезапуск процессов в случае сбоев.
- Гибкость: Подходит для управления любыми процессами.
- Логирование: Удобное управление логами процессов.
Альтернативы Supervisord
- systemd: Встроенная система инициализации в современных Linux-дистрибутивах.
- PM2: Популярный менеджер процессов для Node.js.
- runit: Альтернативная система инициализации и управления процессами.
Supervisord — это мощный инструмент для управления процессами, который особенно полезен для разработчиков и системных администраторов, работающих с веб-приложениями и фоновыми задачами.