2010-08-28 60 views
1

我需要發生的事情: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

回答

1

這種情況最終通過簡單地使用fork和進程組控制自身守護進程來解決,然後讓PHP使用sudo進行系統調用。

我有另一個類似的情況,最終發現

unbuffer -p 

其採用的屏幕內部,並做我最初想有屏幕的那種工作的期望和sh做。

0

我沒有一個完整的解決方案給你,但你可能想看看nohup而不是屏幕。這也消除了期望需求。

0

這是傳遞1位信息(「現在開始」)的大量開銷。如果你忘記了PHP,那麼所有其他的從屬要求就會消失。

如果我正在嘗試這樣做,我可能會編寫一個perl腳本來偵聽TCP端口上的「啓動」命令,並將流程本身分開。這擺脫了對sh,expect,screen和sudo的需求。

+0

PHP有點必須在那裏,因爲整個事情需要通過提交AJAX請求的網頁上的按鈕來調用..我有點懷疑,爲了聽到非常偶然的TCP請求,有一個額外的listen守護進程仍然更有效率來自PHP。當然,你是正確的,那裏可能有很多不必要的開銷。我想叉子會消除屏幕的需要,不是嗎? – conartist6 2010-08-28 00:33:09

相關問題