結論として出来ませんでした。
私の場合はSymfonyのProcessを使って実現しようとし、結果として出来ないという結論に至りました。
試したこと
artisanコマンドにmytask:workと言う名前でコマンドを作成し、以下の様なコードをControllerに書いてみましたが、すぐにProcessが死んでしまいました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; use Symfony\Component\Process\Process; class TaskRunner extends Controller { public function run() { // Webだとカレントが/var/www/html/publicとかなので../artisanと指定している $worker = new Process(['php', '../artisan', 'mytask:work']); $worker->start(); } } |
以下のページを見てみたら、Responseを返した時点でプロセスはKillされてしまう様です。
https://symfony.com/doc/current/components/process.html#:~:text=If%20a%20Response,use%20PHP%2DFPM.
他の方法なら出来るかもしれませんが、めんどくさかったので、私はControllerから実行するのは諦めました。