5

我有一个脚本startbg.php

echo `/usr/bin/php $dir/runbg.php >> $dir/logbg.txt 2>&1 &`;

我从网络上调用(通过 HTTP/Apache)。

runbg.php在后台进程中运行。

但是如果我重新启动 Apache ( /etc/init.d/apache2 restart),后台进程就会被杀死。

无论如何我可以让进程在后台运行吗?

4

3 回答 3

1

您可以在我的测试中打开一个PHP 的内部网络服务器实例(从 PHP 5.4.0 开始,CLI SAPI 提供了一个内置的网络服务器。)在我的测试中杀死httpd.exe没有效果php.exe:8000

<?php 
//Tested with windows

chdir('../php');
//S = Server, listen interface 0.0.0.0 = all : port 8000
//t = Served document root
echo `php -S 0.0.0.0:8000 -t C:\\xampp\\htdocs >> C:\\xampp\\htdocs\\logbg.txt 2>&1 &`;
?>

所以可能(未经测试):

echo `/usr/bin/php -S 0.0.0.0:8000 -t /srv/www/yoursite.com/public_html >> /srv/www/yoursite.com/public_html/logbg.txt 2>&1 &$dir/runbg.php >> $dir/logbg.txt 2>&1 &`;

我不知道如何杀死它:s

于 2012-08-22T10:30:26.113 回答
0

允许进程在没有 apache 的情况下继续运行的一种方法是使其成为服务。然后使用您的命令激活服务 (service runbg start)。如果您没有使服务正常运行,那么它将取决于您在重新启动后启动的命令,但不会随着 apache 重新启动而死。

于 2017-07-05T22:36:29.523 回答
0

startbg.php您应该更改or的进程组 ID runbg.php

Apache/PHP 向其进程组的所有子进程发送信号。我找不到有关该功能的任何文档。但是,我解决了setpgid()从衍生进程调用的问题。

于 2015-12-08T12:29:15.277 回答