このスクリプトは、完了するのを待たずにバックグラウンドで別のスクリプトを実行します。
私のscript.php:
$cmd = "nohup php script2.php > /dev/null 2>&1 &";
exec($cmd);
私のscript2.php:
sleep(10);
mail("me@mail.com","test","ok");
コマンドラインで実行すると、問題なく動作します。呼び出しはすぐに終了し、10 秒後に受信トレイに新しいメールが届きます。
しかし、 http://myserver/script.phpでスクリプトを呼び出すと、何も受信しません。
以下を使用することに注意してください。
$cmd = "php script2.php > /dev/null 2>&1";
両方の呼び出し方法で機能します。したがって、http 呼び出しと nohup の使用に何か問題があります。
exec の代わりに passthru と shell_exec も試しましたが、結果は同じでした。
念のためこれも試してみましたが、いずれにしてもうまくいきませんでした。