Bird
Raised Fist0
Laravelframework~5 mins

Queue worker supervision in Laravel

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction

Queue worker supervision helps keep your background jobs running smoothly. It automatically restarts workers if they stop or crash.

You want to process tasks like sending emails or resizing images without slowing down the user experience.
Your app uses queues to handle jobs in the background and you want to make sure workers don't stop unexpectedly.
You want to automatically restart queue workers after code updates or errors.
You want to monitor and manage multiple queue workers easily.
You want to avoid manual restarts of queue workers after server reboots.
Syntax
Laravel
php artisan queue:work --daemon

# To supervise workers, use a process monitor like Supervisor or Laravel Horizon

# Example Supervisor config snippet:
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /path/to/artisan queue:work --sleep=3 --tries=3 --timeout=90
autostart=true
autorestart=true
numprocs=3
redirect_stderr=true
stdout_logfile=/path/to/worker.log

Laravel itself does not supervise queue workers; you use external tools like Supervisor or Laravel Horizon.

Supervisor config runs multiple worker processes and restarts them if they fail.

Examples
Simple Supervisor config for one worker process that restarts automatically.
Laravel
[program:laravel-worker]
command=php /var/www/html/artisan queue:work --sleep=3 --tries=3
numprocs=1
autostart=true
autorestart=true
stdout_logfile=/var/log/worker.log
Supervisor config for five worker processes to handle more jobs in parallel.
Laravel
[program:laravel-worker]
command=php /var/www/html/artisan queue:work --sleep=3 --tries=3
numprocs=5
autostart=true
autorestart=true
stdout_logfile=/var/log/worker.log
Using Laravel Horizon to supervise and monitor queue workers with a web interface.
Laravel
php artisan horizon

# Laravel Horizon supervises queue workers with a nice dashboard.
Sample Program

This Laravel command starts a queue worker. You can supervise it with Supervisor to keep it running automatically.

Laravel
<?php

// This is a simple Laravel command to start a queue worker
// Normally, you run this in terminal or supervise it with Supervisor

namespace App\Console\Commands;

use Illuminate\Console\Command;

class StartQueueWorker extends Command
{
    protected $signature = 'queue:start-worker';
    protected $description = 'Start a queue worker process';

    public function handle()
    {
        $this->info('Starting queue worker...');
        // This will run the queue worker in daemon mode
        passthru('php artisan queue:work --sleep=3 --tries=3 --timeout=90');
    }
}

// To supervise this worker, create a Supervisor config like:
// [program:laravel-worker]
// command=php /path/to/artisan queue:start-worker
// autostart=true
// autorestart=true
// numprocs=1
// stdout_logfile=/path/to/worker.log

// Output when running the command manually:
// Starting queue worker...
// [worker output appears here as jobs are processed]
OutputSuccess
Important Notes

Queue worker supervision ensures jobs keep running even if a worker crashes.

Supervisor or Laravel Horizon are common tools for this purpose.

Restarting workers after code changes helps apply updates without downtime.

Summary

Queue worker supervision keeps background jobs running reliably.

Use Supervisor or Laravel Horizon to monitor and restart workers automatically.

This helps your app handle tasks smoothly without manual restarts.

Practice

(1/5)
1. What is the main purpose of using Supervisor with Laravel queue workers?
easy
A. To automatically restart queue workers if they stop unexpectedly
B. To speed up the execution of queue jobs
C. To log all queue jobs to a database
D. To convert queue jobs into synchronous tasks

Solution

  1. Step 1: Understand Supervisor's role

    Supervisor monitors processes and restarts them if they stop.
  2. Step 2: Apply this to Laravel queue workers

    Laravel queue workers run background jobs; Supervisor ensures they keep running.
  3. Final Answer:

    To automatically restart queue workers if they stop unexpectedly -> Option A
  4. Quick Check:

    Supervisor restarts workers automatically [OK]
Hint: Supervisor restarts stopped workers automatically [OK]
Common Mistakes:
  • Thinking Supervisor speeds up job execution
  • Confusing logging with supervision
  • Believing Supervisor makes jobs synchronous
2. Which of the following is the correct Supervisor configuration directive to specify the command to run a Laravel queue worker?
easy
A. run=php artisan queue:work
B. command=php artisan queue:work
C. execute=php artisan queue:work
D. start=php artisan queue:work

Solution

  1. Step 1: Recall Supervisor config syntax

    Supervisor uses 'command=' to specify the process command.
  2. Step 2: Match with Laravel queue worker command

    Laravel queue worker runs with 'php artisan queue:work'.
  3. Final Answer:

    command=php artisan queue:work -> Option B
  4. Quick Check:

    Supervisor uses 'command=' for process commands [OK]
Hint: Supervisor config uses 'command=' for commands [OK]
Common Mistakes:
  • Using 'run=' instead of 'command='
  • Confusing 'execute=' or 'start=' as valid directives
  • Omitting the full artisan command
3. Given this Supervisor config snippet:
[program:laravel-worker]
command=php /var/www/artisan queue:work --sleep=3 --tries=3
numprocs=1
autostart=true
autorestart=true
user=www-data

What happens if the Laravel queue worker process crashes?
medium
A. Supervisor will restart the worker automatically
B. The worker will remain stopped until manually restarted
C. Supervisor will log the crash but not restart the worker
D. The worker will restart only if autostart is false

Solution

  1. Step 1: Check 'autorestart' setting

    autorestart=true means Supervisor restarts crashed processes automatically.
  2. Step 2: Understand autostart role

    autostart=true means the worker starts on Supervisor start, but restart depends on autorestart.
  3. Final Answer:

    Supervisor will restart the worker automatically -> Option A
  4. Quick Check:

    autorestart=true means auto restart on crash [OK]
Hint: autorestart=true means auto restart on crash [OK]
Common Mistakes:
  • Confusing autostart with autorestart
  • Assuming manual restart is needed
  • Thinking Supervisor only logs crashes
4. You configured Supervisor to run Laravel queue workers but notice workers are not restarting after failure. Which of these is the most likely cause?
medium
A. The 'numprocs' option is set to 0
B. The 'command' option is missing the '--tries' flag
C. The 'user' option is set to 'root'
D. The 'autorestart' option is set to false or missing

Solution

  1. Step 1: Identify why workers don't restart

    Workers won't restart if 'autorestart' is false or missing.
  2. Step 2: Check other options' impact

    'numprocs=0' disables processes, 'user=root' is allowed but not recommended, '--tries' controls job retries, not restarts.
  3. Final Answer:

    The 'autorestart' option is set to false or missing -> Option D
  4. Quick Check:

    autorestart=false stops auto restart [OK]
Hint: Check 'autorestart' to fix no restart issue [OK]
Common Mistakes:
  • Confusing job retry with process restart
  • Thinking 'user=root' causes restart failure
  • Assuming '--tries' affects Supervisor restart
5. You want to run multiple Laravel queue workers supervised by Supervisor to handle high job volume. Which configuration change is best to achieve this?
hard
A. Set 'numprocs' to 1 and increase '--sleep' time in the command
B. Create multiple Supervisor config files each with one worker and same program name
C. Set 'numprocs' to the number of workers needed and use '%(program_name)s_%(process_num)s' in 'process_name'
D. Use 'autostart=false' and manually start each worker process

Solution

  1. Step 1: Understand running multiple workers

    Supervisor can run multiple processes with 'numprocs' and unique names.
  2. Step 2: Use 'process_name' for unique worker IDs

    Using '%(program_name)s_%(process_num)s' creates unique names for each worker.
  3. Final Answer:

    Set 'numprocs' to the number of workers needed and use '%(program_name)s_%(process_num)s' in 'process_name' -> Option C
  4. Quick Check:

    Multiple workers = numprocs + unique process_name [OK]
Hint: Use numprocs and unique process_name for multiple workers [OK]
Common Mistakes:
  • Duplicating config files with same program name
  • Increasing sleep time reduces throughput
  • Disabling autostart prevents automatic worker start