所以我想做的事情应该相当简单,但我似乎无法弄清楚。我需要杀死不同机器上的某个进程,它们都有一个定义的 IP 范围,尽管它们最终会改变。
比方说,
arp |sort |awk '{print $1}'|grep 10.20.30.18 # IP's range from 180 to 189 so this does the trick
输出是
xxx.xxx.xxx.180
xxx.xxx.xxx.181
所以我想通过 SSH 连接到两者并执行以下操作
ps -ef | grep X11 | grep -v grep | awk '{print $2}' | xargs kill
我该如何继续解决这个问题,而不必通过 SSH 连接到每个进程,然后终止该进程?
答案1
您可以使用for
循环:
HOSTS='server1.example.com server2.example.com server3.example.com'
for server in $HOSTS
do
ssh $server "ps -ef | grep X11 | grep -v grep | awk '{print \$2}' | xargs kill"
done
或者您可以使用为此目的制作的众多应用程序之一。诸如此类clusterssh
。
答案2
您确定要终止进程的所有主机都在您的 arp 缓存中吗?
假设 IP 是连续的,您最好简单地迭代 ip:
for i in {180..189}
do
ssh -l username 10.20.30.$[i} "ps -ef | grep X11 | grep -v grep | awk '{print $2}' | xargs kill"
done