通过php system()命令在后台运行多个系统命令?

通过php system()命令在后台运行多个系统命令?,php,ubuntu,Php,Ubuntu,我想通过打开url在服务器上调用脚本。脚本需要很长时间才能执行,所以我想在后台运行它,这样就不需要保持浏览器打开和担心超时 看起来PHP函数system()应该可以工作,但它不适合我 脚本必须从正确的目录中执行,以便所有相对路径都正确。下面是我要执行的系统命令: cd /path/to/script/directory/;php my_php_script & 这是我最近尝试过但没有成功的事情 system('(cd /path/to/script/directory/;php my_

我想通过打开url在服务器上调用脚本。脚本需要很长时间才能执行,所以我想在后台运行它,这样就不需要保持浏览器打开和担心超时

看起来PHP函数system()应该可以工作,但它不适合我

脚本必须从正确的目录中执行,以便所有相对路径都正确。下面是我要执行的系统命令:

cd /path/to/script/directory/;php my_php_script &
这是我最近尝试过但没有成功的事情

system('(cd /path/to/script/directory/;php my_php_script & > /dev/null)');

有人知道如何做到这一点吗?

在类似Unix的系统(如Linux)上,这很容易做到。Nohup是您需要开始使用的命令,以下命令将继续运行。如果脚本退出或用户注销,这些命令甚至会运行。这与您的命令非常相似,但更易于阅读

system("nohup php /path/to/script/directory/my_php_script > /dev/null &");

PHP的垃圾收集器很容易泄漏内存,一个简单的脚本可以在一天内消耗掉千兆字节的内存。最好将php脚本安排为在数小时或数分钟内退出的cron作业,以便释放内存

哦,如果我也能以低优先级运行这个过程那就太好了-很好?这对我来说不管用。首先,我在脚本中有一些相对路径包含,但它们不起作用,因为脚本是从错误的目录执行的。这就是为什么我的版本中有“cd”语句。其次,当我在命令行中运行该命令时,我得到以下结果:nohup:忽略输入并将stderr重定向到stdout。为什么我需要nohup命令?看起来这只是为了在用户注销后保持后台进程运行。因为apache用户不会注销,所以需要这样做吗?