gpt4 book ai didi

php - nohup:在后台运行 PHP 进程

转载 作者:可可西里 更新时间:2023-11-01 12:59:27 26 4
gpt4 key购买 nike

我尝试在后台运行 php 进程并从 php 文件启动它。

一些信息: PHP 版本 5.2.17,php safe_mode 关闭,linux 系统。我用 exec 启动进程,已经尝试过 shell_exec。我将所有文件设置为 0755、0777。

$pid = exec("nohup $cmd > /dev/null 2> /dev/null & echo $!");

如果我打印这个语句,我得到这个并且 pid 没问题:

nohup /usr/local/bin/php5 /.../../file.php > /dev/null 2> /dev/null & echo $!

如果我在 ssh 下寻找进程

top

我看到我的 php5 进程有正确的 pid。用户是root

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                      
3533 xxxxxxxx 20 0 21356 8868 4580 S 0 0.4 0:00.13 php5
3536 xxxxxxxx 20 0 20836 8260 4428 S 0 0.4 0:00.09 php5
3539 xxxxxxxx 20 0 20836 8260 4428 S 0 0.4 0:00.09 php5
3542 xxxxxxxx 20 0 20836 8260 4428 S 0 0.4 0:00.09 php5
3545 xxxxxxxx 20 0 20836 8260 4428 S 0 0.4 0:00.09 php5
3548 xxxxxxxx 20 0 20836 8260 4428 S 0 0.4 0:00.09 php5
3551 xxxxxxxx 20 0 20836 8260 4428 S 0 0.4 0:00.09 php5

如果我开始流程手册顶部看起来像这样:

PID  USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND 
8141 xxxxxxxx 22 2 24048 9.9m 5344 S 10 0.5 0:00.31 php5

问题:似乎什么都没发生。为了调试一下,我在文件中写了一个输出

ob_start();
echo "STARTING...";
writeLog(ob_get_contents());
//...
function writeLog($info){
$handle = fopen("file.log", "a+");
fwrite($handle, $info);
fclose($handle);
}
exit;

我的文件中没有日志。如果我在浏览器中启动此文件,它会正确处理并获取包含“调试”信息的 file.log。

为什么这在浏览器中有效而不是在 exec/shell_exec 命令中??!我有这些具有正确 pid 的 php 进程,但没有结果。

非常感谢您的帮助!

最佳答案

PHP CLI 环境可以不同于 Web 环境(mod_php、FCGI 等)。当从命令行运行脚本而不是通过网络服务器调用它时,脚本完全有可能因错误而死掉。调试脚本。如果可以,SSH 连接到您的服务器,su 到网络服务器用户,然后您自己从命令行运行脚本。

如果您做不到,请设置您自己的开发服务器,您可以在其中执行此操作(如果您了解一些 Linux,这并不难)。

关于php - nohup:在后台运行 PHP 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5288584/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com