在一個非常簡化的情況下該怎麼做,我有一個腳本,看起來像這樣:擊:當標準輸出不存在
ssh localhost "test.sh foo"
的:
mv test _test
sleep 10
echo $1
mv _test test
,如果我執行它只要腳本正在運行,測試文件的名稱中就會有一個下劃線,當腳本完成時,它會發回foo
。即使您通過按ctrl+c
來終止ssh
命令,或者如果您失去了服務器的連接,但它不會(該文件不會重命名回「test」),該腳本仍應繼續運行。所以,我試過如下:
nohup ssh localhost "test.sh foo"
,這讓SSH免疫ctrl+c
但到服務器斷線連接還是引起了麻煩。經過一些調試後,事實證明,如果腳本中沒有ECHO,腳本實際上會達到最終結果。當你考慮它的時候,這是有道理的 - 當連接斷開時,沒有更多stdout
(ssh套接字)可以回顯,所以它會自動失敗。
我當然可以,呼應一個文件,然後得到的文件,但我寧願更聰明的東西,沿着test tty && echo $1
(但tty
調用像這樣總是返回false
)線。任何建議,非常感謝。
我嘗試不同的東西,比如:' ssh -t localhost「測試。我甚至把所有環境變量和'/ dev'目錄的內容打印出來,然後把所有的環境變量和/ dev目錄的內容打印出來到一個文件,只是爲了查看腳本是否能夠以某種方式識別連接丟失......我能想到的唯一兩個想法是ping回主機或將輸出保存到文件中,但我確信有更多微妙的解決方案... – Ulrik 2014-12-03 21:59:07
'>/dev/null 2>&1'是你的朋友 – 2014-12-03 23:46:15
是的,但我需要從腳本接收輸出,除非我失去了與服務器的連接 - 在任何一種情況下,腳本都必須結束 – Ulrik 2014-12-04 01:32:02