How To Keep Laravel Queue Running In The Background?

Published August 16, 2024

Problem: Keeping Laravel Queues Active

Laravel queues help manage background tasks, but they can stop running unexpectedly. This can delay job processing and affect your Laravel application's performance. Keeping queue workers running is a common issue for Laravel developers.

Solutions for Persistent Queue Processing

Using nohup Command

The nohup command keeps Laravel queue processes running in the background, even after closing an SSH connection. It means "no hang up" and allows a process to continue running after you log out.

To use nohup with Laravel queue, run this command:

nohup php artisan queue:work --daemon &

The "&" at the end starts the process in the background, letting you use the terminal.

Nohup writes output to a file called nohup.out in the current directory. You can redirect the output to a different file or discard it:

nohup php artisan queue:work --daemon > /dev/null 2>&1 &

This command discards both standard output and error messages.

Tip: Monitor nohup processes

To monitor nohup processes, use the 'ps' command:

ps aux | grep artisan

This lists all running artisan processes, including those started with nohup.

Implementing Supervisor

Supervisor is a process control system for Unix-like operating systems. It offers a solution for managing Laravel queue workers.

Supervisor provides these benefits for Laravel queue management:

  • Restarts queue workers if they crash
  • Manages multiple queue workers
  • Logs and monitors processes

To set up Supervisor for Laravel queues:

  1. Install Supervisor on your server
  2. Create a configuration file for your Laravel queue worker
  3. Update the Supervisor configuration
  4. Start the Supervisor process

A basic Supervisor configuration for a Laravel queue worker might look like this:

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /path/to/your/project/artisan queue:work
autostart=true
autorestart=true
user=www-data
numprocs=8
redirect_stderr=true
stdout_logfile=/path/to/your/project/worker.log

This configuration starts 8 queue worker processes and restarts them if they stop.

Example: Supervisor commands

Common Supervisor commands:

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*
sudo supervisorctl stop laravel-worker:*
sudo supervisorctl restart laravel-worker:*

These commands reload the configuration, start, stop, and restart the Laravel queue workers.