exec()
関数は実行されたプログラムからの出力を処理するため、出力を/dev/null
(書き込み可能な仮想ファイルで、書き込むすべてのデータを自動的に失う) にリダイレクトすることをお勧めします。
実行してみてください:
exec("/usr/local/bin/php -q /home/gooffers/somefile.php > /dev/null 2>&1 &");
注 :2>&1
エラー出力を標準出力に> /dev/null
リダイレクトし、標準出力をその仮想ファイルにリダイレクトします。
それでも問題が解決しない場合は、他のスクリプトを実行するだけのスクリプトを作成できます。exec()
タスクを実行中はプロセスに従いますが、タスクが終了すると解放されます。実行されたスクリプトが別のスクリプトを実行するだけの場合、タスクは非常に高速で、exec は同じ方法で解放されます。
実装を見てみましょう。exec.php
次を含む を作成します。
<?php
if (count($argv) == 1)
{
die('You must give a script to exec...');
}
array_shift($argv);
$cmd = '/usr/local/bin/php -q';
foreach ($argv as $arg)
{
$cmd .= " " . escapeshellarg($arg);
}
exec("{$cmd} > /dev/null 2>&1 &");
?>
次に、次のコマンドを実行します。
exec("/usr/local/bin/php -q exec.php /home/gooffers/somefile.php > /dev/null 2>&1 &");
引数がある場合は、それらも指定できます。
exec("/usr/local/bin/php -q exec.php /home/gooffers/somefile.php x y z > /dev/null 2>&1 &");