esedark
server infrastructure representing Laravel queue workers

Laravel / Horizon / Supervisor / queues

Laravel Horizon vs Supervisor: what to choose and why

Horizon and Supervisor are not direct replacements: one manages Laravel's Redis workload, while the other supervises the operating-system process.

The short answer is usually both. Laravel Horizon provides queue configuration, balancing, metrics, failed-job visibility and operational controls for Redis-backed queues. Supervisor is a general Linux process monitor that starts a command, restarts it after failure and launches it at boot. Choosing between them as if they did the same job creates fragile production setups.

What Laravel Horizon owns

Horizon runs Laravel queue workers and gives them application-aware configuration. You can separate queues, set process limits, choose balancing strategies, define timeouts and inspect throughput or failures. It requires Redis and should be protected behind authenticated, authorized access. It does not independently guarantee that php artisan horizon returns after a server restart or fatal process exit.

What Supervisor owns

Supervisor keeps a long-running command alive at operating-system level. It can start Horizon or ordinary queue:work processes, capture stdout and stderr, set the working directory and run under a restricted user. It does not understand Laravel jobs, queue wait time, tags, balancing or failed-job semantics.

Recommended production architecture

For Redis queues, run Horizon as the workload manager and let Supervisor—or systemd, Kubernetes or your platform's equivalent—keep the Horizon master process alive. During deployment, put the application in the required safe state, install code and dependencies, run compatible migrations, clear or rebuild caches, then execute php artisan horizon:terminate. The supervisor restarts Horizon so new workers load the release.

When plain Supervisor is enough

Use Supervisor with queue:work when the application uses a non-Redis queue driver, the workload is small, or Horizon's dashboard and balancing are unnecessary. Define different programs for materially different queues and resource profiles. Keep worker timeout below the queue's retry-after window so a slow job is not processed twice.

Common mistakes

  • running Horizon manually in an SSH session
  • using Horizon with a queue backend it does not support
  • exposing the dashboard publicly
  • setting unlimited retries for non-idempotent jobs
  • deploying without restarting long-lived workers
  • mixing heavy and latency-sensitive jobs in one queue
  • letting logs grow without rotation
  • running workers as root or with broad secrets
  • treating a green process as proof that jobs are healthy

Practical checklist

  • confirm the queue backend and delivery guarantees
  • make important jobs idempotent
  • set timeout, retry-after, tries and backoff coherently
  • separate queues by workload and priority
  • cap worker memory and process count
  • use least-privilege service users and environment access
  • protect Horizon authorization
  • rotate logs and monitor disk space
  • alert on queue age, failures, saturation and restart loops
  • test graceful deploys and server reboots

Observability and stability

Track oldest-job age, throughput, failure rate, runtime percentiles, worker saturation and repeated exceptions. Keep correlation IDs between the request, job and downstream service, while avoiding secrets or unnecessary personal data in payloads and logs. See Laravel queues in production and the Laravel, Redis and queues pattern for heavy jobs.

When hiring a technical person makes sense

Bring in a Laravel or infrastructure engineer when jobs are duplicated, deployments lose work, queue latency is unexplained, Horizon repeatedly exhausts resources, or nobody owns recovery procedures. A good review connects application semantics, Redis capacity, process supervision and deployment behavior instead of changing one configuration blindly.

Final takeaway

Use Horizon for Laravel-aware Redis queue management and a process supervisor for operating-system resilience. If your queue system is slow or unreliable, explore my Laravel and infrastructure services or contact me for a production review.