我正在尝试构建一个脚本,将 66 个 redhat 盒子中的所有失效进程输出到一个文本文件中。我了解在一个盒子上执行此操作的原理,但我不确定如何将该过程硬塞到将在一个盒子上运行的东西中,但查询多个盒子。
所以,我找到了这个小脚本:
for host in $(cat hosts.txt); do ssh "$host" "$command" >"output.$host"; done
我知道我基本上可以ps -ef | grep "defunct"
作为提交$command
,但我认为我创建的任何输出文件都会被删除到它正在运行的主机上。
我需要从一个盒子运行此程序,将输出存储在该盒子上,但包含其他 65 个盒子的信息?
我相信我们有无密码 ssh。我对 Unix 的了解是中等的,我知道一些,因为我使用 SAS。
答案1
重定向发生在调用计算机上,而不是远程计算机上,因此结果文件将是本地的。此外,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