如何在后台运行PHP内置的Web服务器?

16
我已经编写了一个在持续集成环境中执行的PHP CLI脚本。其中一件事是运行Protractor测试。
我的计划是让内置的PHP 5.4的内置Web服务器在后台运行:
php -S localhost:9000 -t foo/ bar.php &

然后运行Protractor测试,使用localhost:9000

protractor ./test/protractor.config.js

然而,PHP内置的Web服务器不能作为后台服务运行。我似乎找不到任何允许我使用PHP做到这一点的东西。
这是否可行?如果是,怎么做? 如果这是绝对不可能的,我可以考虑其他替代方案。

你是说你想将php进程变成守护进程吗?如果你在一个nix系统上,你可以研究一下init.d脚本。我没有使用过php5.4的Web服务器,但如果它运行一个进程,它可以被放到后台。 - EdgeCaseBerg
3个回答

29
你可以像在后台运行任何应用程序一样完成此操作。
nohup php -S localhost:9000 -t foo/ bar.php > phpd.log 2>&1 &

这里使用nohup来防止终端被锁定。接下来,需要重定向标准输出(>)和标准错误输出(2>)。


18

这里提供一种方法来停止后台运行的内置php服务器。这在CI的某个阶段需要运行测试时非常有用:

# Run in background as Devon advised
nohup php -S localhost:9000 -t foo/ bar.php > phpd.log 2>&1 &
# Get last background process PID
PHP_SERVER_PID=$!

# running tests and everything...
protractor ./test/protractor.config.js

# Send SIGQUIT to php built-in server running in background to stop it
kill -3 $PHP_SERVER_PID

太好了,这正是我在寻找的。对于Windows有类似的解决方案吗?也许我可以在内部服务器的路由器脚本中添加一些内容来侦听“关机”命令? - Radon8472

1

你可以使用&>将标准输出和错误输出都重定向到/dev/null(无处)。

nohup php -S 0.0.0.0:9000 -t foo/bar.php &> /dev/null &

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接