我尝试在后台运行php进程,并从一个php文件启动。nohup:在后台运行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。用户是根
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
问题: 好像也没什么happens.To调试一点点我写了一个输出文件
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进程,但没有结果。
非常感谢您的帮助!
您应该先尝试提供您尝试执行的脚本的绝对路径,而不是像您现在似乎在做的相对路径。 IE浏览器。使用'nohup/usr/local/bin/php5 /absolute/path/to/file.php>/dev/null 2>/dev/null&echo $!' – wimvds 2011-03-13 09:51:30
我有这个文件的绝对路径。我可以从ssh中的每个目录启动nohup。它的工作。不幸的是不使用PHP。 – stoe 2011-03-13 09:58:02
然后它可能是一个权限问题。因此,请检查您的日志(Apache,php错误日志,控制台日志)......如果您正在运行AppArmor/SELinux,请尝试关闭它以测试是否需要更改安全策略以允许执行这些后台任务。 – wimvds 2011-03-13 10:26:09