laravelでnohupでexec()を実行してもバックグラウンド実行にならない

2020年3月30日月曜日

Laravel

t f B! P L
LaravelのControllerで、あるコマンドをphpのexec()を使ってバックグラウンドで実行しようとしたところ、どうやってもバックグラウンドで実行されません。具体的なコードは以下のとおりです。exec()とnohupでpythonのスクリプトを実行するコードです。

public function start()
{
  $cmd = PYTHON3_PATH.'/python3 '.BIN_PATH.'/run_proc.py ';
  $cmd_bg = "nohup " . $cmd . " 1>> std.log 2>> error.log&";
  exec($cmd_bg,$out,$stat);
  if ($stat == 0) {
    $fn = SPOOL_PATH.'/split.pid';
    file_put_contents($fn,$out[0]);
    return 'OK';
  } else {
    return "Error";
  }
}

原因

Laravelのビルドイン開発サーバを使っているのが原因でした。次のようなコマンドで開発サーバを起動し、そのサーバからコントローラを呼び出すとバックグラウンドで実行されないようです。

php artisan serve
apacheのサーバに切り替えると、問題なくバックグラウンドで実行されるようになりました。

このブログを検索

QooQ