Unix / Windows,安装后台进程?来自php代码

时间:2012-02-12 20:32:24

标签: php windows unix exec popen

所以我从http://php.net/manual/en/function.exec.php

找到了一个函数
function execInBackground($cmd) {
if (substr(php_uname(), 0, 7) == "Windows"){
    pclose(popen("start /B ". $cmd, "r")); 
}
else {
    exec($cmd . " > /dev/null &");  
}
}

Windows用法:

pclose(popen('start /B php path/to/background_cron.php', 'r'));

Unix用法:

exec('php path/to/background_cron.php >> path/to/background_error.log &')

但是当调用这些行时,实际上并没有发生任何事情(等待5分钟后)。难道我做错了什么?在这些行被激活之前,我有一个file_exists检查我的路径/到/ background_cron.php是否存在,如果不存在则会返回错误。

在实时unix服务器上,所有文件夹权限都设置为写入,读取,执行所有者,组,公共(0755),文件权限设置为读取所有者,组,公共(644)。 unix命令运行后,background_log变为空,它创建4个新空行(\ n),但不返回任何预期

1 个答案:

答案 0 :(得分:2)

Windows中有点奇怪的是,由于网络服务器以不同的用户身份运行,因此它会在自己的用户空间中启动应用程序 - 而不是桌面。

流程可能正在启动且不在您的流程列表中 - 请检查所有用户。此外,检查事件日志,以防它尝试运行但抛出异常

另一种可能性是Web用户无权执行命令 - 查看应用程序池的运行者,并检查他们对这些文件夹的权限。

请注意,不要通过允许Web服务器运行任意代码来创建安全漏洞。