如何讓這個卑鄙的 bash 腳本 24/7 在後台運行?

如何讓這個卑鄙的 bash 腳本 24/7 在後台運行?

這聽起來可能有點重複,但先聽我說完。

我執行一個 shell 腳本,它有一個活動的標準輸入,有時在啟動時需要一些輸入。我需要它 24/7 運行,並且需要在失敗時通過輸入命令或在彈出提示時輸入“y”來重新啟動。我已經嘗試過兩種方法:使用 nohup 並點擊 Ctrl+Z,輸入 bg 都顯示作業已停止且未運行。只有當我執行時fg它才會啟動。有任何線索如何解決這個問題嗎?

PS我也試過scriptcommand &它也以“已停止”結束。

將其設定為 systemd 服務有意義嗎?

答案1

如您所描述的依賴輸入的程式需要在終端多工器內啟動,例如tmuxhttps://en.wikipedia.org/wiki/Tmux) 或screenhttps://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 文件有更多信息

相關內容