【问题标题】:Why this process is not running in background?为什么这个进程不在后台运行?
【发布时间】:2011-05-06 13:16:25
【问题描述】:

所以基本上我想运行将生成大约 15k pdf 文件的脚本,并且由于 php max_timeout 需要从 shell 完成...

服务器:Ubuntu 10.04.1 PHP : 5.3.2-1ubuntu4.5

所以我目前尝试的是:

function run_in_background($Command){
    $ps = shell_exec("nohup php5 $Command > /dev/null 2> /dev/null & echo $!");
    return $ps;
}

$ok = run_in_background('/var/www/custom/web/public/make_pdf.php');

if(!empty($ok))
    var_dump($ok);
else
    exit('Fail');

然后我去 ssh 控制台并执行 ps $ps 作为响应,我只得到没有信息的标题 - 女巫意味着进程没有运行......

我怎样才能做到这一点?

【问题讨论】:

  • 尝试不使用echo $! 或以& 结尾。如果要运行 2 个进程“内联”,请使用 && 而不是简单的 &。例如:nohup php5 $Command > /dev/null 2> /dev/null && echo $! &
  • 在这种情况下 $ok 为空,脚本返回我失败。
  • @arma 你怎么知道进程是否以错误结束?尝试将输出放在文件中。
  • @jotapdiez 我不知道我所知道的它没有返回进程的 PID。好的,你如何输出文件中的所有内容?
  • @arma 只需执行 nohup php5 $Command > command_stout.txt 2> command_stderr.txt && echo $! & 并检查两个文件

标签: php linux ubuntu


【解决方案1】:

尝试不使用echo $! 或以& 结尾。如果要运行 2 个进程“内联”,请使用 && 而不是简单的 &

示例:nohup php5 $Command > /dev/null 2> /dev/null && echo $! &

要检查进程是否以错误结束,请执行以下操作:

nohup php5 $Command > command_stout.txt 2> command_stderr.txt && echo $! &

【讨论】:

    【解决方案2】:

    尝试在命令后面加上 & :

    $ps = shell_exec("nohup php5 $Command & > /dev/null 2> /dev/null & echo $!");
    

    【讨论】:

    • 仍然没有骰子,我得到了 pid 好的但进程是空的。
    猜你喜欢
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-03
    • 2014-01-01
    • 1970-01-01
    相关资源
    最近更新 更多