我找到了这个脚本来检查程序是否正在运行。但我确实有多个服务器(它是一个 Spark 集群),我的程序可能在其中运行。
使用此脚本,我需要在实际程序运行的同一节点上运行 shell 脚本。然后只有我才能找到该服务。
#!/bin/sh
SERVICE='myProgram'
if ps ax | grep -v grep | grep $SERVICE > /dev/null
then
echo "$SERVICE service running, everything is fine"
else
echo "$SERVICE is not running"
echo "$SERVICE is not running!" | mail -s "$SERVICE down" root
fi
任何人都可以帮我编写一个程序来检查进程是否正在我列出的任何一台服务器上运行吗?如果不是,我需要给操作系统返回非零代码。
就像当 shell 脚本在 server1 上运行时,我需要 ssh 到 node2 并检查程序是否正在运行。
最佳答案
此脚本将是您问题的一个很好的起点。
您可以使用可以 ssh 的用户在您的一台服务器上运行此脚本
到其他服务器无需密码。
我想您知道 ~/.ssh/id_rsa.pub
和 ~/.ssh/authorized_keys
文件的作用。
我希望您能学到一些该脚本所需的 bash 知识。
#!/bin/bash
SERVICE='myProgram'
nodes="nodeA nodeB nodeC nodeD"
rm -f err.log 2>/dev/null
for nd in $nodes ; do
rm tmp_file 2>/dev/null
ssh -o "NumberOfPasswordPrompts 0" -o "StrictHostKeyChecking no" $nd \
ps ax |grep -vw grep >tmp_file 2>>error.log
test -s tmp_file || { printf "$nd: SSH failed\n" |tee -a error.log; continue; }
if (( `grep -cw "$SERVICE" tmp_file` > 0 ))
then
echo "$SERVICE service running on $nd, everything is fine"
else
echo "$SERVICE is not running on $nd"
echo "$SERVICE is not running on $nd!" | mail -s "$SERVICE down on $nd" root
fi
done
关于linux - 检查程序是否正在特定节点上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40473427/