sh/expect/sudo/screen在一个命令中一起需要

问题描述:

我需要发生的事情:PHP需要启动一个服务器应用程序,它具有在后台运行的根权限。所有这些都应该保持沉默。sh/expect/sudo/screen在一个命令中一起需要

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

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

-Expect使屏幕上有一个点要在其中运行

需要-Sh因为无论开始运行需要后台运行,可能与&运营商。因为我不想让我的PHP页面返回任何东西,所以还需要将任何输出传递给/ dev/null /。 (?叉...)这是不知何故,如果有人能想到更好的办法做PHP中的调用可能转让

举个例子,我试图用脚本是:

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

对于参考我正在尝试启动一个反恐精英源服务器,并且startserv是处理启动服务器并收集其输出的C代码的名称。任何人都可以纠正我的语法片断,或告诉我为什么它是错误的做法?

+1

您可能会在这里得到一些回应,但serverfault.com可能让人们对这类事情更有经验。 – jkerian 2010-08-28 00:21:47

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

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

unbuffer -p 

其采用的屏幕内部,并做我最初想有屏幕的那种工作的期望和sh做。

我没有一个完整的解决方案给你,但你可能想看看nohup而不是屏幕。这也消除了期望需求。

这是传递1位信息(“现在开始”)的大量开销。如果你忘记了PHP,那么所有其他的从属要求就会消失。

如果我正在尝试这样做,我可能会编写一个perl脚本来侦听TCP端口上的“启动”命令,并将流程本身分开。这摆脱了对sh,expect,screen和sudo的需求。

+0

PHP有点必须在那里,因为整个事情需要通过提交AJAX请求的网页上的按钮来调用..我有点怀疑,为了听到非常偶然的TCP请求,有一个额外的listen守护进程仍然更有效率来自PHP。当然,你是正确的,那里可能有很多不必要的开销。我想叉子会消除屏幕的需要,不是吗? – conartist6 2010-08-28 00:33:09