queue:restart — キューの再起動を行うコマンド

artisan

php artisan queue:restart は、現在稼働中のキューワーカー(queue:workqueue:listen)に対し、「現在のジョブが終わったら自動的に再起動する」 という指示を与える Artisan コマンドです。
実際にはキャッシュにタイムスタンプを格納し、ワーカーはその値を監視して再起動を検知します。


使い方

php artisan queue:restart

ポイント

  • コマンドは引数やフラグを受け取らない
  • ワーカー自体は停止のみを指示し、再起動は Supervisor などのプロセスマネージャに委ねられる

実装の裏側

項目内容
キャッシュキーlaravel_queue_last_restart(デフォルト)
Carbon::now()->timestamp(整数)
ワーカー挙動queue:workqueue:listen は実行中にキーを確認し、更新されていれば「次のジョブへ進む前に停止」
再起動Supervisor 等でワーカーが停止すると自動で再起動するように設定する必要がある

実務例

# ① コードデプロイ
git pull origin main
composer install --no-dev --optimize-autoloader
php artisan migrate --force

# ② キューワーカー再起動
php artisan queue:restart

Supervisor 設定例(/etc/supervisor/conf.d/laravel-worker.conf

[program:laravel-worker]
command=php /var/www/html/artisan queue:work --sleep=3 --tries=3
process_name=%(program_name)s_%(process_num)02d
numprocs=4
autostart=true
autorestart=true
stopasgroup=true

queue:restart を実行すると、ワーカーは現在のジョブを完了した後に停止し、Supervisor が自動で再起動します。


よくある落とし穴

問題原因対策
ワーカーが再起動しないSupervisor の autorestart が無効autorestart=true を設定
タイムスタンプが競合複数環境で同一キャッシュドライバーを共有キー名を環境別に設定
ジョブが長時間走っているqueue:restart はジョブ完了後に停止--timeout オプションでタイムアウトを調整
Redis クラスタを使用キーが一貫して更新されないRedis Cluster 用にスレッドセーフな設定を行う

関連API・コマンド

コマンド用途
php artisan queue:workワーカーを手動起動
php artisan queue:listen1つのプロセスで継続的にジョブを取得
php artisan queue:flushキューを全削除
Cache::forget('laravel_queue_last_restart')タイムスタンプを手動で削除
Queue::stop()ワーカーを即時停止

Pest テスト例

<?php

use Illuminate\Support\Facades\Cache;
use Tests\TestCase;

uses(TestCase::class);

it('queue:restart updates the restart timestamp in cache', function () {
    // 初期状態ではキーは存在しない
    expect(Cache::has('laravel_queue_last_restart'))->toBeFalse();

    // コマンド実行
    $this->artisan('queue:restart');

    // キーが設定され、整数が格納されていることを確認
    expect(Cache::has('laravel_queue_last_restart'))->toBeTrue();
    expect(Cache::get('laravel_queue_last_restart'))->toBeInt();
});

参考リンク


レン (Wren)

こんにちは。レンです。

Laravelのコードの森に住んでいる、小さな案内役です。
ルーティングの枝やクラスの影を歩きながら、コードの流れや仕組みを眺めています。

このサイトでは、Laravelの基本から実装のコツまで、開発で役立つポイントを静かに整理しています。
難しいことを増やすのではなく、コードの見通しが少し良くなるヒントを届けるのが役目です。

「この処理はどこに書くのがいいのか」
「Laravelではどう考えると整理できるのか」

そんな疑問に、小さなメモを残すような気持ちで記事を書いています。

コードを書いている途中で迷ったとき、
このサイトが少し立ち止まって整理できる場所になればうれしいです。

レン (Wren)をフォローする