supervisord — Process Manager
If you like this project, consider supporting me on Buy Me a Coffee ☕️
tags:
- process
- supervisor
- supervisord
- daemon
- sysadmin
-
linux
📦 supervisord Cheatsheet
Description
supervisord is a client/server system to control UNIX processes (daemons). Monitors and restarts processes, manages logs, and provides a web/XML-RPC interface. / supervisord — клиент-серверная система управления UNIX-процессами (демонами). Мониторинг, перезапуск, управление логами, web/XML-RPC-интерфейс.
Common use cases / Типовые сценарии:
- Keep app daemons running / Поддержание приложений запущенными
- Multi-process apps without systemd / Мультисервисные приложения без systemd
- Development environment process control / Управление процессами в dev
- Legacy app supervision / Супервизия легаси-приложений
Status: Maintained (Supervisord upstream). Alternatives: systemd, runit, s6, pm2 (Node), Docker restart policies. / Статус: поддерживается; альтернативы — systemd, runit, s6, pm2, Docker restart.
Paths: config /etc/supervisor/supervisord.conf; programs /etc/supervisor/conf.d/; sock /var/run/supervisor.sock.
Cross-reference: systemd, runit, journalctl.
Installation
Install supervisord / Установка supervisord
# Debian/Ubuntu
apt install supervisor
# RHEL/Rocky/Alma/Fedora
dnf install supervisor
# pip
pip install supervisor
supervisord --version
systemctl enable --now supervisord
Configuration
Main files / Основные файлы
/etc/supervisor/supervisord.conf
/etc/supervisor/conf.d/<PROGRAM>.conf
/var/log/supervisor/
supervisord.conf / supervisord.conf
/etc/supervisor/supervisord.conf
[unix_http_server]
file=/var/run/supervisor.sock
chmod=0700
[supervisord]
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisord.pid
nodaemon=false
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock
[include]
files = /etc/supervisor/conf.d/*.conf
Program config / Конфигурация программы
/etc/supervisor/conf.d/myapp.conf
[program:myapp]
command=/usr/local/bin/myapp --config /etc/myapp/config.yaml
directory=/srv/myapp
autostart=true
autorestart=true
startsecs=10
startretries=3
user=www-data
numprocs=1
redirect_stderr=true
stdout_logfile=/var/log/supervisor/myapp.log
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=5
environment=APP_ENV="production",LOG_LEVEL="info"
supervisorctl reread
supervisorctl update
Core Management
supervisorctl / supervisorctl
supervisorctl status
supervisorctl start myapp
supervisorctl stop myapp
supervisorctl restart myapp
supervisorctl reload
supervisorctl update
supervisorctl tail -f myapp stdout
supervisorctl tail -f myapp stderr
supervisorctl pid myapp
Web interface / Web-интерфейс
# In supervisord.conf
[inet_http_server]
port=127.0.0.1:9001
Sysadmin Operations
Logs / Логи
tail -f /var/log/supervisor/supervisord.log
tail -f /var/log/supervisor/myapp.log
supervisorctl tail myapp stdout
Logrotate / Ротация логов
/etc/logrotate.d/supervisor
/var/log/supervisor/*.log {
weekly
rotate 4
compress
delaycompress
missingok
notifempty
copytruncate
}
Security
Hardening / Ужесточение
- Restrict unix socket permissions / Ограничьте права unix-сокета
- Run processes as non-root users / Запускайте процессы от non-root
- Do not expose web interface publicly / Не выставляйте web-интерфейс наружу
- Use environment files for secrets / Храните секреты в env-файлах
- Monitor restart loops / Мониторьте циклы перезапуска
- Keep supervisord updated / Обновляйте supervisord
# chmod=0700 on unix_http_server
# user= non-root in [program:...]
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| Program not starting | Bad command / perms | Check command, user |
| FATAL backoff | Repeated crashes | Check app logs |
| socket permission denied | Wrong socket path/perm | Fix unix_http_server |
| Config not applied | Missing reread/update | supervisorctl reread; update |
| Process exits immediately | App crash on start | Check app error output |
supervisorctl status
supervisorctl tail myapp stderr
tail -f /var/log/supervisor/supervisord.log
Comparison Tables
Process managers / Менеджеры процессов
| Manager | Notes |
|---|---|
| supervisord | Mature, Python, simple |
| systemd | Modern, distro default |
| runit | Minimal, fast |
| pm2 | Node.js focused |
| s6 | Feature-rich, complex |
Production Runbooks
Runbook: Add new supervised app / Добавление нового приложения
- Install app dependencies / Установить зависимости
- Create conf.d/myapp.conf / Создать конфигурацию
supervisorctl reread; update/ Применить конфигурациюsupervisorctl status myapp/ Проверить статус- Test start/stop/restart / Протестировать управление
- Configure logrotate / Настроить logrotate
- Document process name and user / Задокументировать имя и пользователя
Runbook: Process crash loop / Циклические падения процесса
supervisorctl status— see state / Проверить статусsupervisorctl tail myapp stderr— check errors / Проверить ошибки- Check app config and dependencies / Проверить конфиг и зависимости
- Increase startretries or fix root cause / Исправить корневую причину
supervisorctl restart myapp/ Перезапустить- Monitor for stability / Мониторить стабильность
- Document incident / Задокументировать инцидент
Documentation Links
- supervisord docs — http://supervisord.org/
- supervisord GitHub — https://github.com/Supervisor/supervisor
- supervisorctl man — http://supervisord.org/faq.html