Ssh
跨多個伺服器送出“ps”,輸出到一個文本文件
我正在嘗試建構一個腳本,該腳本將跨 66 個 redhat 框輸出所有已失效的程序到單個文本文件。我了解在一個盒子上執行此操作的原則,但我不確定如何將該過程硬塞到一個可以在一個盒子上執行的東西中,但要查詢幾個盒子。
所以,我找到了這個小腳本:
for host in $(cat hosts.txt); do ssh "$host" "$command" >"output.$host"; done
我知道我基本上可以送出
ps -ef | grep "defunct"
為$command
,但我認為我創建的任何輸出文件都將被拖放到執行它的主機上。我需要從一個盒子執行,將輸出儲存在那個盒子上,但包含其他 65 個盒子的資訊?
我相信我們有無密碼的 ssh。我對 Unix 的了解是中級的,我知道一些,因為我使用的是 SAS。
重定向發生在呼叫機器上,而不是遠端機器上,因此結果文件將是本地的。此外,
grep
不需要遠端執行:while read -r host; do ssh "$host" ps -ef | grep "defunct" >"output.$host" done <hosts.txt
這
ps -ef
在每台主機上執行grep
並將提取defunct
輸出行。將grep
在本地執行,而不是遠端執行。結果文件同樣是在本地創建的。如果你想要一個輸出文件:
while read -r host; do ssh "$host" ps -ef | grep "defunct" done <hosts.txt >output.txt
甚至(對於單次呼叫
grep
)while read -r host; do ssh "$host" ps -ef done <hosts.txt | grep "defunct" >output.txt