На главную

DevOps и серверы

Конфиг supervisord

Собирает конфиг supervisord для воркеров очередей, Celery, Gunicorn и Node.js: несколько процессов одной программы, перезапуск, корректная остановка группой, переменные окружения с экранированием % и логи с ротацией.

[program:laravel-worker]

Без shell: |, && и > не работают. Процесс — на переднем плане

Столько секунд прожить, чтобы считаться запущенным

Потом — SIGKILL

Меньше — раньше старт

/etc/supervisor/conf.d/laravel-worker.conf

[program:laravel-worker]
command=/usr/bin/php /var/www/app/artisan queue:work redis --sleep=3 --tries=3 --max-time=3600
process_name=%(program_name)s_%(process_num)02d
numprocs=4
directory=/var/www/app
user=www-data
autostart=true
autorestart=true
startsecs=5
startretries=3
stopsignal=TERM
stopwaitsecs=3600
stopasgroup=true
killasgroup=true
priority=999
redirect_stderr=true
stdout_logfile=/var/log/supervisor/laravel-worker_%(process_num)02d.log
stdout_logfile_maxbytes=50MB
stdout_logfile_backups=5

Применить и проверить

sudo cp laravel-worker.conf /etc/supervisor/conf.d/laravel-worker.conf
sudo supervisorctl reread     # перечитать конфиги
sudo supervisorctl update     # применить: запустить новое, перезапустить изменённое
sudo supervisorctl status laravel-worker:*
sudo supervisorctl restart laravel-worker:*
sudo supervisorctl tail -f laravel-worker:laravel-worker_00

supervisord или systemd

На современном Linux systemd умеет то же самое без отдельного демона: перезапуск, лимиты, изоляцию и журнал. supervisord удобнее, когда нужно десять одинаковых воркеров одной строкой numprocs, общая группа для рестарта и управление без root через supervisorctl — или внутри контейнера, где systemd нет.

Конструктор systemd unit