11

我认为有很多类似的帖子,但经过搜索后我还没有找到解决方案。

基本上,我试图在后台运行两个脚本。当我在命令行中运行它们时,我在调用我的第一个脚本后看到:

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

我尝试 ...script.php > /dev/null &过同样的结果。我得到:

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

我忽略并运行第二个。我注意到它似乎挂在那里,按下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 回答
0

首先将您的 php 命令放入 shell 文件脚本中,例如myscript.sh

#!/bin/bash
# myscript.sh file
php script.php

使用 myscript.sh 运行 nohup:

sudo nohup ./myscript.sh &

使用 ps 验证:

ps aux | grep myscript.sh
于 2021-12-10T18:39:19.760 回答