Bash
為什麼在 ssh 會話關閉後後台程序終止
我使用 XManager xshell 作為 ssh 客戶端,連接到遠端伺服器,然後執行命令:
nohup sleep 60 & ps -ef | grep sleep exit
然後再次登錄
ps -ef | grep sleep
那個過程沒有了!
有什麼可能導致這個?ssh 守護程序是 openssh 8,伺服器是 redhat 7
使用
systemd-logind
,有(預設)設置:KillUserProcesses=yes
在您的logind.conf中。它將在使用者註銷後終止使用者在其登錄會話中啟動的所有程序。您可以將其設置為 no,或為您的使用者設置以下設置:
KillExcludeUsers=yourusername
看來您想要的是以“可拆卸”方式執行遠端命令,以便將來可以連接回它。
nohup
確實是一個 hack,正如您所見,systemd 會在使用者會話終止時處理它。
tmux
您可以通過使用一些終端多路復用器(如,或其他screen
)更優雅地解決此問題,而不是通過禁用它的清理機制在 systemd 級別解決此問題。abduco
終端多路復用器可以創建分離的會話,即使您註銷也會繼續執行。您可以隨時重新連接到會話並調整其內容。