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