Laravel queue:work not working on Windows
WindowsでLaravelのqueue:workやqueue:listenが正常に動作しない問題
概要
Windows環境でLaravelのqueue:workやqueue:listenコマンドが正常に動作しない問題です。ジョブが処理されない、プロセスがすぐに終了する、シグナルハンドリングの問題などが発生します。
エラーメッセージ
The Process class relies on proc_open, which is not available on your PHP installation.
PHP Fatal error: Call to undefined function pcntl_signal()
queue:work command not processing jobs
Worker stops immediately after starting
原因
- pcntl拡張がない: WindowsのPHPにはpcntl拡張がデフォルトで含まれていない
- proc_open無効化: セキュリティ設定でproc_openが無効
- シグナルハンドリング: Windowsはposixシグナルをサポートしていない
- パス区切り文字: Windows/Linuxのパス区切り文字の違い
- プロセス管理: Supervisorが使えない
解決策
1. queue:workの代わりにqueue:listenを使用
| |
2. 同期ドライバを開発環境で使用
| |
3. Windowsタスクスケジューラを使用
| |
# タスクスケジューラの設定
# トリガー: 1分ごとに実行
# アクション: PowerShell -ExecutionPolicy Bypass -File "C:\path\to\run-queue.ps1"
4. NSSM (Non-Sucking Service Manager) を使用
| |
5. バッチファイルでループ実行
| |
6. データベースキュードライバの使用
| |
| |
7. Windows Subsystem for Linux (WSL) を使用
| |
8. Redisキューの設定(推奨)
| |
| |
9. Laravel Horizonの代替(Windows)
| |
10. Docker for Windowsを使用
| |
11. ジョブの同期的なディスパッチ(デバッグ用)
| |
デバッグ方法
| |
| |
よくある間違い
- Windowsでqueue:workが動かないのをバグと勘違いする
- pcntl拡張をWindowsにインストールしようとする
- 本番環境でもsyncドライバを使ってしまう
- WSLを使わずにSupervisorをインストールしようとする
関連エラー
参考リンク
Laravel の他のエラー
この記事は役に立ちましたか?