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代码的名称。任何人都可以纠正我的语法片断,或告诉我为什么它是错误的做法?
这种情况最终通过简单地使用fork和进程组控制自身守护进程来解决,然后让PHP使用sudo进行系统调用。
我有另一个类似的情况,最终发现
unbuffer -p
其采用的屏幕内部,并做我最初想有屏幕的那种工作的期望和sh做。
我没有一个完整的解决方案给你,但你可能想看看nohup而不是屏幕。这也消除了期望需求。
这是传递1位信息(“现在开始”)的大量开销。如果你忘记了PHP,那么所有其他的从属要求就会消失。
如果我正在尝试这样做,我可能会编写一个perl脚本来侦听TCP端口上的“启动”命令,并将流程本身分开。这摆脱了对sh,expect,screen和sudo的需求。
PHP有点必须在那里,因为整个事情需要通过提交AJAX请求的网页上的按钮来调用..我有点怀疑,为了听到非常偶然的TCP请求,有一个额外的listen守护进程仍然更有效率来自PHP。当然,你是正确的,那里可能有很多不必要的开销。我想叉子会消除屏幕的需要,不是吗? – conartist6 2010-08-28 00:33:09
您可能会在这里得到一些回应,但serverfault.com可能让人们对这类事情更有经验。 – jkerian 2010-08-28 00:21:47