我運行類似於以下獲取SSH遠程命令終止,使並行選項xargs的可以繼續
getHosts | xargs -I{} -P3 -n1 ssh {} 'startServer; sleep 5; grep -m 1 "server up" <(tail -f log)'
問題的命令是,它似乎像SSH一會兒掛有時甚至好後服務器已經出現。此命令是否有任何問題可能導致它不終止,以便並行執行可以繼續?當我在遠程shell中運行命令時,服務器的檢查似乎可靠,並在向服務器寫入日誌時按時關閉。
我運行類似於以下獲取SSH遠程命令終止,使並行選項xargs的可以繼續
getHosts | xargs -I{} -P3 -n1 ssh {} 'startServer; sleep 5; grep -m 1 "server up" <(tail -f log)'
問題的命令是,它似乎像SSH一會兒掛有時甚至好後服務器已經出現。此命令是否有任何問題可能導致它不終止,以便並行執行可以繼續?當我在遠程shell中運行命令時,服務器的檢查似乎可靠,並在向服務器寫入日誌時按時關閉。
代替遠程命令時的形式
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
,這樣如果日誌文件被旋轉,我們將跟隨新文件,而不是繼續無用地跟隨舊文件。兩種方式我可以看到它未能終止:
startServer
tail -f
不捕獲該行並永遠等待(因爲tail
意志,默認情況下采取的最後10行)ssh
也可能會失敗的各種原因進行連接:主機停機,鑰匙丟了,等我想補充一些錯誤檢查conditi附加組件寫入日誌和/或具有
|| echo "Failed to do stuff" | mail -s SUBJECT [email protected]
如果花費超過五秒鐘的服務器上來,會發生什麼?也許'grep'獲得了一個日誌文件的_old_版本,一個永遠不會再被寫入的日誌文件? – sarnold
經驗上五秒鐘的時間足以讓他們清除並重新創建。 – jonderry
如果你想保證它,你可以'rm -f日誌; startserver的;觸摸日誌;尾-f log'(觸摸將創建該文件,如果'startServer'沒有,所以'tail'不會失敗,該文件不存在)。 – Jay