Laravel 13.34: Worker Crashes, Timeout Signals &amp; More | Mohamed Said        [  ![Mohamed Said](https://cdn.msaied.com/01KT78WE565VEMM3PSNQAAB0MH.png)   Mohamed Said Laravel Backend Engineer  ](https://www.msaied.com) [ Home ](https://www.msaied.com) [ Projects ](https://www.msaied.com/projects) [ Articles  ](https://www.msaied.com/articles) [ Certificates ](https://www.msaied.com/certificates) [ Contact ](https://www.msaied.com#contact-section) 

       [  ](https://github.com/EG-Mohamed)       

 [ Home ](https://www.msaied.com) [ Projects ](https://www.msaied.com/projects) [ Articles ](https://www.msaied.com/articles) [ Certificates ](https://www.msaied.com/certificates) [ Contact ](https://www.msaied.com#contact-section) 

  [ home ](https://www.msaied.com)    [ articles ](https://www.msaied.com/articles)    What's New in Laravel 13.34: Worker Crash Tracking, Timeout Signals, and More        On this page       1. [  What's New in Laravel 13.34 ](#whats-new-in-laravel-1334)
2. [  Count Worker Crashes Toward maxExceptions ](#count-worker-crashes-toward-codemaxexceptionscode)
3. [  Interruptible Jobs Receive SIGALRM Before a Timeout ](#interruptible-jobs-receive-sigalrm-before-a-timeout)
4. [  Job Duration on JobProcessed ](#job-duration-on-codejobprocessedcode)
5. [  Flush Failed Jobs for a Single Queue ](#flush-failed-jobs-for-a-single-queue)
6. [  Other Notable Changes ](#other-notable-changes)
7. [  Key Takeaways ](#key-takeaways)

  ![What's New in Laravel 13.34: Worker Crash Tracking, Timeout Signals, and More](https://cdn.msaied.com/721/fce528b9143188e98a1629bc9d8f17b2.png)

 [  Laravel ](https://www.msaied.com/articles?category=laravel)  #Laravel   #Queue   #Laravel 13   #Release   #PHP  

 What's New in Laravel 13.34: Worker Crash Tracking, Timeout Signals, and More 
===============================================================================

     30 Sep 2026      3 min read    ![Mohamed Said](https://cdn.msaied.com/01M22N44A70A5MC2S599JP0MPH.webp)  Mohamed Said  

       Table of contents

1. [  01   What's New in Laravel 13.34  ](#whats-new-in-laravel-1334)
2. [  02   Count Worker Crashes Toward maxExceptions  ](#count-worker-crashes-toward-codemaxexceptionscode)
3. [  03   Interruptible Jobs Receive SIGALRM Before a Timeout  ](#interruptible-jobs-receive-sigalrm-before-a-timeout)
4. [  04   Job Duration on JobProcessed  ](#job-duration-on-codejobprocessedcode)
5. [  05   Flush Failed Jobs for a Single Queue  ](#flush-failed-jobs-for-a-single-queue)
6. [  06   Other Notable Changes  ](#other-notable-changes)
7. [  07   Key Takeaways  ](#key-takeaways)

 What's New in Laravel 13.34
---------------------------

Laravel v13.34.0 was released on September 30, 2026, with a focused set of queue improvements alongside several bug fixes and smaller developer-experience enhancements. Here is a breakdown of the most notable changes.

---

Count Worker Crashes Toward `maxExceptions`
-------------------------------------------

A queued job that throws an exception already counts toward `$maxExceptions`, but a job whose worker dies mid-run — from an out-of-memory kill, a segfault, or a container restart — does not. William Julian-Vicary contributed the `#[CountCrashesAsExceptions]` attribute to close that gap.

```php
use Illuminate\Queue\Attributes\CountCrashesAsExceptions;
use Illuminate\Queue\Attributes\MaxExceptions;

#[MaxExceptions(3), CountCrashesAsExceptions]
class ProcessPodcast implements ShouldQueue
{
    public function retryUntil(): DateTime
    {
        return now()->addHour();
    }
}

```

Alternatively, set `public $countCrashesAsExceptions = true;` on the job class. The worker writes a cache key when it starts an opted-in job and removes it when the attempt finishes cleanly. If the key is still present on the next attempt, the previous run crashed, and the worker increments the exception counter. The feature is opt-in because it requires a `maxExceptions` value and adds two cache calls per attempt.

---

Interruptible Jobs Receive SIGALRM Before a Timeout
---------------------------------------------------

Jack Bayliss updated the worker so jobs that implement the `Interruptible` contract are notified via `SIGALRM` when they are about to time out. Previously, a timeout killed the worker without giving the job a chance to save state.

```php
use Illuminate\Contracts\Queue\Interruptible;

class GenerateReport implements ShouldQueue, Interruptible
{
    public function interrupted(int $signal): void
    {
        if ($signal === SIGALRM) {
            $this->saveProgress();
        }
    }
}

```

The worker also dispatches the `JobInterrupted` event (introduced in Laravel 13.31) and reports any exception thrown inside `interrupted()` without blocking the timeout.

---

Job Duration on `JobProcessed`
------------------------------

The `JobProcessed` event now carries a `duration` property (a float in milliseconds, rounded to two decimal places). Before this release, you had to listen for both `JobProcessing` and `JobProcessed` and compute the elapsed time yourself.

```php
use Illuminate\Queue\Events\JobProcessed;

Event::listen(function (JobProcessed $event) {
    Log::info("{$event->job->resolveName()} took {$event->duration}ms");
});

```

The value is `null` when the event is dispatched outside the worker context.

---

Flush Failed Jobs for a Single Queue
------------------------------------

`queue:flush` previously deleted every failed job across all queues. The new `--queue` option lets you target one queue at a time:

```bash
php artisan queue:flush --queue=sftp-sync

# Combine with --hours to keep recent failures
php artisan queue:flush --queue=sftp-sync --hours=48

```

---

Other Notable Changes
---------------------

- **`Schema::getColumn()`** — returns the details for a single column instead of the full `getColumns()` list; returns an empty array when the column does not exist.
- **`assertDatabaseCount()` accepts an array** — check multiple tables and counts in a single assertion call.
- **Enums in environment checks** — `App::environment()`, the scheduler's `environments()`, the `@env` Blade directive, and `Queue::isPaused()` now all accept backed enums.
- **`requireMorphMap()` enforced on reads** — an unmapped `*_type` value now throws a `ClassMorphViolationException` during lazy and eager loading, not only on save.

---

Key Takeaways
-------------

- Use `#[CountCrashesAsExceptions]` or `$countCrashesAsExceptions = true` to prevent runaway retries caused by worker crashes rather than thrown exceptions.
- Implement `Interruptible` and handle `SIGALRM` to save job progress before a timeout marks the job as failed.
- Read `$event->duration` from `JobProcessed` instead of manually tracking start times.
- Scope `queue:flush` to a single queue with `--queue` to avoid clearing unrelated failures.
- `Schema::getColumn()` is a convenient alternative to `getColumns()` when you only need one column's metadata.

---

[View the full Laravel 13.34 release notes on Laravel News →](https://laravel-news.com/laravel-13-34-0)

 Found this useful?

          [  ](https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.msaied.com%2Farticles%2Fwhats-new-in-laravel-1334-worker-crash-tracking-timeout-signals-and-more&text=What%27s+New+in+Laravel+13.34%3A+Worker+Crash+Tracking%2C+Timeout+Signals%2C+and+More) [  ](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fwww.msaied.com%2Farticles%2Fwhats-new-in-laravel-1334-worker-crash-tracking-timeout-signals-and-more) 

 Frequently Asked Questions 
----------------------------

  3 questions  

     Q01  What does the `#\[CountCrashesAsExceptions\]` attribute do in Laravel 13.34?        It makes the queue worker count a crashed attempt (caused by an out-of-memory kill, segfault, or container stop) as one exception toward the job's `maxExceptions` limit. The worker uses a cache key to detect whether the previous attempt ended cleanly. The feature is opt-in because it requires a `maxExceptions` value and adds two cache calls per attempt. 

      Q02  How does the new SIGALRM support help interruptible jobs?        Before Laravel 13.34, a job timeout killed the worker without notifying the job. Now, jobs that implement the `Interruptible` contract receive a `SIGALRM` signal when they are about to time out, giving them a chance to save progress inside the `interrupted()` method before the attempt is marked as failed. 

      Q03  Can I flush failed jobs for only one queue in Laravel 13.34?        Yes. The `queue:flush` command now accepts a `--queue` option. Running `php artisan queue:flush --queue=sftp-sync` deletes failed jobs only from the `sftp-sync` queue, leaving failures on other queues untouched. You can combine it with `--hours` to preserve recent failures. 

  Continue reading

 More Articles 
---------------

 [ View all    ](https://www.msaied.com/articles) 

 [ ![PostgreSQL Recursive CTEs in Laravel: Hierarchical Data Without the ORM Gymnastics](https://cdn.msaied.com/720/3e3d256d54dd4036099122e0b035e482.png) laravel postgresql eloquent 

### PostgreSQL Recursive CTEs in Laravel: Hierarchical Data Without the ORM Gymnastics

Recursive CTEs let PostgreSQL walk tree structures in a single query. Learn how to wire them into Laravel's qu...

  ![Mohamed Said](https://cdn.msaied.com/01M22N44A70A5MC2S599JP0MPH.webp)  Mohamed Said 

 30 Sep 2026     2 min read  

  Read    

 ](https://www.msaied.com/articles/postgresql-recursive-ctes-in-laravel-hierarchical-data-without-the-orm-gymnastics) [ ![FrankenPHP, OPcache JIT, and Preloading: Maximising Laravel Throughput](https://cdn.msaied.com/719/2129727c31378ebd8778814d6764bac1.png) laravel frankenphp performance 

### FrankenPHP, OPcache JIT, and Preloading: Maximising Laravel Throughput

A practical deep-dive into running Laravel under FrankenPHP with OPcache JIT and preloading enabled — covering...

  ![Mohamed Said](https://cdn.msaied.com/01M22N44A70A5MC2S599JP0MPH.webp)  Mohamed Said 

 30 Sep 2026     2 min read  

  Read    

 ](https://www.msaied.com/articles/frankenphp-opcache-jit-and-preloading-maximising-laravel-throughput-1) [ ![Laravel Release Cycle: Versions, Support Policy, and Dates](https://cdn.msaied.com/718/05d0e66985cc7bda5c0be6c37bb8da65.png) Laravel Release Cycle Support Policy 

### Laravel Release Cycle: Versions, Support Policy, and Dates

Laravel ships one major version per year in Q1, with weekly minor and patch releases in between. Here is every...

  ![Mohamed Said](https://cdn.msaied.com/01M22N44A70A5MC2S599JP0MPH.webp)  Mohamed Said 

 29 Sep 2026     4 min read  

  Read    

 ](https://www.msaied.com/articles/laravel-release-cycle-versions-support-policy-and-dates) 

   [  ![Mohamed Said](https://cdn.msaied.com/01KT78WE565VEMM3PSNQAAB0MH.png)   Mohamed Said Laravel Backend Engineer  ](https://www.msaied.com)Senior Backend Engineer specializing in Laravel, scalable SaaS platforms, APIs, and cloud infrastructure. I build secure, high-performance web applications that help businesses grow.

Explore

- [Home](https://www.msaied.com)
- [Projects](https://www.msaied.com/projects)
- [Articles](https://www.msaied.com/articles)
- [Certificates](https://www.msaied.com/certificates)
- [Contact](https://www.msaied.com#contact-section)

Connect

- [   hello@msaied.com ](mailto:hello@msaied.com)
- [   +20 109 461 9204 ](tel:+201094619204)

© 2026 Mohamed Said. All rights reserved.

 [  ](https://github.com/EG-Mohamed) [  ](https://www.linkedin.com/in/msaiedm/) [  ](https://wa.me/201094619204) [  ](mailto:hello@msaied.com) [  ](https://drive.google.com/file/u/0/d/1MF20IPRJyzfy32mhEutjL5EpSls0w2Q8/view)
