1

我需要发生的事情:PHP 需要启动一个在后台运行的具有 root 权限的服务器应用程序。这一切都应该保持沉默。

-sudo 需要允许 php 执行需要 root 权限的操作。

- 需要屏幕以允许应用程序在启动该过程的网页范围之外运行。

- 需要期望,以便屏幕有一个可以运行的点

-Sh 是必需的,因为任何开始运行的东西都需要在后台运行,大概是使用 & 运算符。它还需要将任何输出通过管道传输到 /dev/null/,因为我不希望我的 PHP 页面返回任何内容。如果有人能想出更好的方法在 PHP 中进行调用(fork ...?),这可能是可以协商的

例如,我尝试使用的脚本是:

#!/usr/bin/expect -f
spawn sh ( screen -t srcds /usr/local/srcds_l/startserv )& > /dev/null
exit 0

作为参考,我正在尝试启动 Counter-Strike Source 服务器,而 startserv 是处理启动服务器并收集其输出的 C 代码的名称。谁能更正我对该片段的语法,或者告诉我为什么这样做是错误的?

4

3 回答 3

1

这种情况最终通过简单地使用 fork 和进程组控件使进程守护自己,然后让 PHP 执行带有 sudo 的系统调用来解决。

我有另一个类似的情况最终发现

unbuffer -p

它在内部使用 screen ,并完成了我最初想让 screen expect 和 sh 做的那种工作。

于 2010-11-01T18:37:49.000 回答
0

我没有为您提供完整的解决方案,但您可能想查看 nohup 而不是 screen。这也消除了 Expect 的需要。

于 2010-08-28T00:26:26.230 回答
0

传达 1 位信息(“现在开始自己”)的开销很大。如果您忘记了 PHP,那么所有其他从属需求都会消失。

如果我试图这样做,我可能会编写一个 perl 脚本来在 TCP 端口上侦听“启动”命令,然后将进程本身分叉。这消除了对 sh、expect、screen 和 sudo 的需求。

于 2010-08-28T00:28:35.053 回答