Inventory the application beyond HTTP
A Laravel app can serve pages while queued email or another background operation is stopped. An upgrade needs the web flow, queue connection, worker process, scheduled commands and dependency inventory. Define the exact current and target versions; this page uses Laravel 12 queue documentation, not an assertion that commands and defaults are identical in every legacy app.
- Identify the queue connection and named queues.
- Record whether the failure began after deployment.
- Separate the business operation from its email notification.
Workers carry state across jobs
Laravel queue workers keep the booted application in memory. They do not automatically reload code after deployment. Laravel documents a graceful restart signal, but the workers then exit; a correctly configured process manager is needed to launch replacements. The signal also depends on the application's cache configuration.
- Inspect worker supervision and existing logs before restarting.
- Avoid starting a second unmanaged worker as a temporary fix.
- Make the deployment plan include compatible handling of already queued jobs.
Retries can repeat a real-world action
A failed job may already have sent a message or changed an external system before its failure was recorded. Retrying is not automatically harmless. Timeout and reservation settings also matter: a worker timeout should be shorter than retry_after so a still-running job is not made available prematurely. Review operation identity and duplicate protection before replay.
- Keep job IDs and a redacted exception, not whole private payloads.
- Use a synthetic workflow and safe email sink for testing.
Request the right scope
One stopped queue or email workflow is different from a framework upgrade. Send the versions, queue type, preceding deployment and redacted symptom. Do not send .env files, passwords or queue payloads containing personal data. Scope and authorised execution are agreed before private work or a live restart.
Sources and limits
- Laravel 12 queue documentation Checked 2026-10-10.
- Queue workers are long-lived and do not automatically notice code changes.
- Worker timeout must be shorter than retry_after.
- Laravel official queue source Checked 2026-10-10.
- queue:restart exits workers gracefully after the current job; a process manager must restart them.
- queue:failed lists recorded failed jobs.