這聽起來可能有點重複,但先聽我說完。
我執行一個 shell 腳本,它有一個活動的標準輸入,有時在啟動時需要一些輸入。我需要它 24/7 運行,並且需要在失敗時通過輸入命令或在彈出提示時輸入“y”來重新啟動。我已經嘗試過兩種方法:使用 nohup 並點擊 Ctrl+Z,輸入 bg 都顯示作業已停止且未運行。只有當我執行時fg
它才會啟動。有任何線索如何解決這個問題嗎?
PS我也試過scriptcommand &
它也以“已停止”結束。
將其設定為 systemd 服務有意義嗎?
答案1
如您所描述的依賴輸入的程式需要在終端多工器內啟動,例如tmux
(https://en.wikipedia.org/wiki/Tmux) 或screen
(https://www.gnu.org/software/screen/)。將其視為終端機視窗的基於文字的版本。
使用screen my-program
來啟動my-program
.然後你可以分離從虛擬螢幕控制台使用按鍵組合Ctrl- A Ctrl- D,您將返回到開始時的 shell,但您的程式仍會在背景中執行。然後,使用screen -r
您可以重新連線到虛擬控制台。
screen(和您的程式)將繼續運行,直到您的程式退出或伺服器重新啟動。
tmux
非常相似,但具有更多選項和功能,並使用不同的鍵盤快捷鍵。
答案2
若要讓腳本繼續在背景執行,請使用 nohup: nohup scriptcommand &
。理想情況下,腳本可以選擇不提示輸入。如果由於某種原因這不是一個選擇,預計可用於輸入“y”。
為腳本建立 systemd 服務將允許在系統重新啟動時啟動腳本。Restart=always
如果服務退出或終止,您也可以在 systemd 檔案中使用來重新啟動服務,systemd 文件有更多信息。