題 如何使用ssh在遠程Unix機器上運行命令並在命令完成之前退出?


如何使用ssh在Unix機器上運行命令並在命令完成之前退出?

例如,如果我輸入

ssh localhost 'sleep 60 &'

即使睡眠在後台運行,ssh也會在我的終端上掛起,直到睡眠完成。


13
2017-07-19 17:54


起源


你可能想要 & 在報價之外。 - Brad Gilbert
不,這只是將整個工具包和kaboodle放在後台,我無法輸入密碼。 - Richard Hoskins


答案:


SSH有一個-f開關,與你在客戶端使用nohup完全相同,但是ssh可能會要求輸入密碼。像這樣使用它:

ssh localhost -f 'command'

:SSH仍然存在於後台,因此如果在服務器上的命令完成之前關閉客戶端,它將被中止。 如果要在執行命令後關閉ssh連接,可以使用服務器端的屏幕:

ssh localhost -f 'screen -d -m sleep 60'

17
2017-07-19 18:14



如果我執行'ssh remotemachine -n​​'長時間運行命令> withremoteredirects 2>&1 </ dev / null&'並且客戶端關閉將命令完成? - Richard Hoskins
Afaik沒有。我的ssh連接丟失了,ssh守護進程應該終止所有終端“在ssh內部”。自終端啟動命令後,Ans將被終止,因為父進程終止。但它值得嘗試;) - Martin
服務器端的'nohup'而不是'screen'怎麼樣? - Richard Hoskins
@Brad Gilbert什麼都沒有?我可以想到一些事情,但有一點是沒有共同點的,就是所有POSIX機器上都沒有“屏幕”。 - Richard Hoskins
gnu.org/software/screen/manual - Brad Gilbert


使用nohup,stdout / stderr重定向,並在後台運行命令:

 nohup ssh localhost 'sleep 60' >/dev/null 2>/dev/null &

編輯:甚至更好,只需使用ssh的-f參數:

ssh -f localhost 'sleep 60'

6
2017-07-19 18:04



您可以將兩個重定向組合在一起 &>/dev/null。 - Brad Gilbert
@BradGilbert該語法與POSIX不兼容;為了節省一些角色,很難為犧牲兼容性而爭辯。 - tripleee


或登錄後使用 ssh,開始 screen 如果您可能想稍後回來,請查看進度或輸出。


2
2017-07-19 18:12



你也可以使用我個人覺得更容易配置的“tmux”。這兩個應用程序幾乎相同,每個應用程序都有其優缺點。 - mzuther