if语句,SSH和执行远程命令

时间:2015-04-30 16:26:58

标签: bash if-statement

我正在编写一些当前通过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

1 个答案:

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

如果sshpkill命令失败,这将很方便失败。

您可以做的另一项改进是仅在$IFS命令的持续时间内覆盖read。这可以让你摆脱保存和恢复它的代码。

while IFS=, read -r server searchtxt; do
    ...
done