11

似たような投稿がたくさんあると思いますが、検索してもまだ解決策が見つかりません。

基本的に、バックグラウンドで 2 つのスクリプトを実行しようとしています。コマンドラインでそれらを実行すると、最初のスクリプトを呼び出した後に次のように表示されます。

/usr/bin/nohup php script.php > nohupoutput.log & echo $!

私は ...script.php > /dev/null &同じ結果で試しました。私は得る:

/usr/bin/nohup: ignoring input and redirecting stderr to stdout

私は無視して2番目のものを実行します。そこにぶら下がっているように見えることに気づき、押すとEnter元に戻りましたmachine:~folder>

/usr/bin/nohup php script2.php > nohupoutput.log & echo $!

両方のスクリプトが機能します。これを shell_exec コマンドに変換しようとしましたが、何も機能していないようです。ビットが問題を引き起こしていると思われignoring inputますが、よくわかりません。とにかく、以下は機能しません。ブラウザでハングするだけです:

$output = shell_exec('/usr/bin/nohup php script.php > /dev/null &');
$output = shell_exec('/usr/bin/nohup php script2.php > /dev/null &');
4

4 に答える 4

12

試す:

$output = shell_exec('/usr/bin/nohup php script.php >/dev/null 2>&1 &');

または:

exec('/usr/bin/nohup php script.php >/dev/null 2>&1 &');
于 2011-02-08T07:20:22.973 に答える
2

これはうまくいくはずです:

shell_exec('nohup /usr/bin/php path/to/script.php > output.txt &');
于 2013-11-28T15:42:53.780 に答える
2
<?php
function execInBackground($cmd) {
    if (substr(php_uname(), 0, 7) == "Windows"){
        pclose(popen("start /B ". $cmd, "r")); 
    }
    else {
        exec($cmd . " > /dev/null &");  
    }
}

// take note: to get your PHP_PATH, try looking at your phpinfo :)
echo execInBackground("/usr/local/php53/bin/php 'example2.php'");
?>
于 2014-05-14T00:23:50.077 に答える