2012-06-30 33 views
1

我運行類似於以下獲取SSH遠程命令終止,使並行選項xargs的可以繼續

getHosts | xargs -I{} -P3 -n1 ssh {} 'startServer; sleep 5; grep -m 1 "server up" <(tail -f log)' 

問題的命令是,它似乎像SSH一會兒掛有時甚至好後服務器已經出現。此命令是否有任何問題可能導致它不終止,以便並行執行可以繼續?當我在遠程shell中運行命令時,服務器的檢查似乎可靠,並在向服務器寫入日誌時按時關閉。

+0

如果花費超過五秒鐘的服務器上來,會發生什麼?也許'grep'獲得了一個日誌文件的_old_版本,一個永遠不會再被寫入的日誌文件? – sarnold

+1

經驗上五秒鐘的時間足以讓他們清除並重新創建。 – jonderry

+0

如果你想保證它,你可以'rm -f日誌; startserver的;觸摸日誌;尾-f log'(觸摸將創建該文件,如果'startServer'沒有,所以'tail'不會失敗,該文件不存在)。 – Jay

回答

1

代替遠程命令時的形式

startServer; sleep 5; grep -m 1 "server up" <(tail -f log) 

我最好使用

grep -m 1 "server up" <(tail -F log -n 0) & startServer ; wait 

差異:

  • 在之前開始拖尾日誌嘗試重新啓動服務器,以便我們不會錯過任何消息。我們從日誌結尾開始,因此我們沒有看到任何以前的「服務器啓動」消息。
  • 使用tail-F選項而不是-f,這樣如果日誌文件被旋轉,我們將跟隨新文件,而不是繼續無用地跟隨舊文件。
1

兩種方式我可以看到它未能終止:

  1. 對端掛在startServer
  2. 服務器「服務器上」後,產生了很多郵件,tail -f不捕獲該行並永遠等待(因爲tail意志,默認情況下采取的最後10行)

ssh也可能會失敗的各種原因進行連接:主機停機,鑰匙丟了,等我想補充一些錯誤檢查conditi附加組件寫入日誌和/或具有

|| echo "Failed to do stuff" | mail -s SUBJECT [email protected] 
+0

肯定是有用的,但是這不會幫助'ssh'更快...... – sarnold

+0

真正的失敗,但我認爲這個問題是問,如果有,將導致命令不終止的情況。同意,這不會造成'ssh'改變絲毫行爲。 – Jay

+1

哦,好點約_ten線_... – sarnold