我正在编写一些当前通过SSH连接到多个服务器的代码并远程测试以查看进程是否正在运行。最终目标是,如果进程未运行,我将收到电子邮件警报。我有那么多工作。
但是,如果SSH连接失败,我也想要一个警告。麻烦的是,无论我尝试什么,我都无法使用我当前的if,the,else代码。
#!/bin/sh
filename="/root/scripts/sysmon_server_lists.txt"
identity="/root/.ssh/sysmon"
OLDIFS=$IFS
IFS=,
while read -r server searchtxt;
do
if [ ! -z $server ]
then
if [ `ssh -n -q -t -i $identity root@$server "ps -ef | grep $searchtxt | grep -v grep | wc -l"` -gt 0 ]
then
echo "Process is running on $server."
else
echo "Process is not running on $server."
fi
echo "Server is $server"
echo "Searchtext is $searchtxt"
echo " "
echo "-----"
echo " "
fi
done < $filename
IFS=$OLDIFS
echo "Finished"
exit 0
答案 0 :(得分:0)
检查进程是否正在运行的更简单方法是使用pkill -0
。您可以直接在if
语句中检查其返回值,从而无需使用括号[ ]
和反引号`...`
。
if ssh -nqti "$identity" root@"$server" pkill -0f "$searchtxt"; then
echo "Process is running on $server."
else
echo "Process is not running on $server." >&2
fi
如果ssh
或pkill
命令失败,这将很方便失败。
您可以做的另一项改进是仅在$IFS
命令的持续时间内覆盖read
。这可以让你摆脱保存和恢复它的代码。
while IFS=, read -r server searchtxt; do
...
done