我想編寫一個 bash 腳本,它可以 ssh 進入伺服器,啟動連續的後台進程(無限的 python 腳本)並退出伺服器。這是我嘗試過的:
ssh user@domain "python3 script.py &"
ssh user@domain "python3 script.py & exit"
ssh user@domain "nohup python3 script.py & exit"
他們都沒有工作。該腳本成功啟動,但我無法退出伺服器並且它保持登入狀態。
答案1
該nohup
命令沒有按照您的想法進行操作 - 它忽略掛斷訊號,以便可以在終端驅動程式不發送SIGHUP
到附加進程的情況下刪除 STDIO 上的(終端)連接,但nohup
不會關閉自己的STDIO 連接,並且它在effect 將它們傳遞給它啟動的進程,因此sshd
將等待直到進程終止並且這些描述符因此被關閉。
因此,您需要確保您啟動的進程也沒有連接到由sshd
(STDIN 已在 上開啟/dev/null
)為其提供的 STDOUT 和 STDERR 描述符,並且您可以透過將它們重新導向(到檔案或到/dev/null
)來做到這一點。該nohup
命令並不是嚴格需要的,因為SIGHUP
當 SSH 連線斷開時不會發送任何內容。
嘗試這個:
ssh user@domain "python3 script >/dev/null 2>&1 &"
答案2
嘗試終端多路復用器,tmux 很棒。我通常不喜歡在您可能需要安裝某些東西的地方提供建議,但 tmux 是一個非常方便的應用程序,可以放在您的工具帶中。 (可能已經安裝)
您可以關閉包含在 tmux 中的應用程序,分離關閉您的筆記型電腦,轉到其他地方重新登入並重新附加到仍在 tmux 中運行的會話。如果您的作業系統較舊,螢幕也會類似,但我更喜歡 tmux。
您可以從命令列啟動新應用程式或像這樣格式化的應用程式
tmux 新會話“command1”
tmux new-session "ping 8.8.8.8"
但您可能應該為您的會話命名。現在簡寫一個名為 muxping 的新會話,該會話在背景啟動。 -d 是分離的。
tmux new -d -s muxping "ping 8.8.8.8"
現在在後台顯示它
tmux ls
附加到它
tmux a
此外,您還可以在 tmux 中分割畫面並執行許多非常方便的操作。有許多網站都有 tmux 備忘單,可以簡化大型手冊頁。上手非常容易。