Back to Blog
Queue Worker Management in Production
Queue Workers Need Supervision
Queue workers are long-running processes that can fail, run out of memory, or become stuck. Proper supervision ensures reliability.
Supervisor Configuration
# /etc/supervisor/conf.d/laravel-worker.conf
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/app/artisan queue:work redis --sleep=3 --tries=3 --max-time=3600
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=www-data
numprocs=8
redirect_stderr=true
stdout_logfile=/var/www/app/storage/logs/worker.log
stopwaitsecs=3600
Managing Supervisor
# Reload configuration
sudo supervisorctl reread
sudo supervisorctl update
# Manage workers
sudo supervisorctl start laravel-worker:*
sudo supervisorctl stop laravel-worker:*
sudo supervisorctl restart laravel-worker:*
sudo supervisorctl status
Horizon for Redis Queues
// config/horizon.php
'environments' => [
'production' => [
'supervisor-1' => [
'connection' => 'redis',
'queue' => ['high', 'default', 'low'],
'balance' => 'auto',
'minProcesses' => 3,
'maxProcesses' => 10,
],
],
],
# Supervisor for Horizon
[program:horizon]
process_name=%(program_name)s
command=php /var/www/app/artisan horizon
autostart=true
autorestart=true
user=www-data
redirect_stderr=true
stdout_logfile=/var/www/app/storage/logs/horizon.log
stopwaitsecs=3600
Deployment Considerations
# After deployment, restart workers to pick up new code
php artisan queue:restart
# Horizon provides graceful termination
php artisan horizon:terminate
Monitoring Queue Health
- Queue depth (jobs waiting)
- Processing time
- Failed job count
- Worker memory usage
Conclusion
Queue workers need process supervision, proper configuration, and monitoring. Use Supervisor for basic setups, Horizon for advanced Redis queue management.
Related Articles
Need Help With Your Project?
I respond to all inquiries within 24 hours. Let's discuss how I can help build your production-ready system.
Get In Touch