Gnu-Screen
一旦執行的腳本結束,防止 GNU 螢幕終止會話
我試圖強制 GNU 螢幕創建一個“虛擬”終端,而不附加到它,在裡面執行腳本並且一旦腳本結束就不會終止會話。
我嘗試了很多組合,包括:
screen -dmS udplistener /share/Sys/autorun/start_udp_listeners.sh
要麼
screen -S udplistener -X /share/Sys/autorun/start_udp_listeners.sh
他們都沒有工作。我要麼在沒有執行腳本的情況下獲得會話,腳本就會執行,但會話一旦完成就會終止,或者我收到“未找到螢幕會話”錯誤。
我基本上想要做的是執行 UDP 監聽器,用 PHP 編寫並使其在無限循環中工作(不要中斷監聽)。是的——我可以在最後執行 PHP 腳本
&
,強制 PHP CLI 作為守護程序執行。問題是,我正在使用一個叫做伺服器的垃圾(QNAP——永遠,永遠不要買這個垃圾!),它似乎忽略了這一點。一旦我註銷 SSH 會話,腳本就會停止。所以
screen
似乎是唯一的選擇。但我不明白,為什麼一旦執行命令或腳本結束它就會終止會話?編輯:我也試過在網際網路上找到的例子:
screen -dmS name screen -S name -p windowname -X stuff 'mc '
不缺!附加到它之後(
screen -R name
)我看到午夜指揮官沒有被處決。儘管範例作者說,它會。
要在腳本完成後保持螢幕繁忙,只需在視窗中保持持久執行。該“某物”的最簡單選擇可能是互動式外殼。這是一種方法(假設
bash
選擇互動式外殼):screen -dmS session_name sh -c '/share/Sys/autorun/start_udp_listeners.sh; exec bash'
-dm
:以分離模式啟動螢幕-S
:為螢幕設置會話名稱,以便稍後檢索sh -c '...'
:而不是簡單地執行你的腳本,這將終止,用於sh -c
執行多個命令exec bash
: 腳本終止後,sh
上面的腳本將切換到互動式 shell (bash
),它永遠不會退出,直到外部終止它。screen
只要bash
實例還活著,它就會保持打開狀態。