跨多个服务器提交“ps”,输出到一个文本文件

跨多个服务器提交“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。

答案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

相关内容