通过减少ssh的数量来提高代码的性能

时间:2010-07-13 11:07:58

标签: unix scripting shell ssh

这个函数需要花费很多时间来计算一个过程的状态,因为每次必须ssh进入机器并找到一个过程的状态。

我只有四台机器和大约50多个进程要监控,详情请参阅configDaemonDetails.txt

像:

abc@sn123|Daemon_1|processname_1
abc@sn123|Daemon_2|processname_2
efg@sn321|Daemon_3|processname_3 

如何减少ssh一次进入计算机并查找txt文件中定义的所有进程信息的时间。吗

CheckProcessStatus ()
{
         echo "              ***** Checking Process Status ***** "
         echo "========================================================="
         IFS='|'
         cat configDaemonDetails.txt | grep -v "^#" | while read MachineDetail Daemon ProcessName
         do

                Status=`ssh -f -T ${MachineDetail} ps -ef | egrep -v "grep|less|vi|more" | grep "$ProcessName"`
                RunTime=`echo "$Status" | sed -e 1'p' -e '1,$d' | awk '{print $5" "$6}'`
                if [ -z "$Status" ]
                        then
                                echo "The Process is DOWN $Daemon | $ProcessName "
                        else
                                echo "The Process $Daemon | $ProcessName is up since  $RunTime"
                fi

         done

         echo "-----------------------------------------------------"

}

谢谢:)

2 个答案:

答案 0 :(得分:2)

你不能一次获取整个ps -ef输出,然后适当地解析它吗?我怀疑这就是你所要求的,也许你想要的只是一个如何做到这一点的例子?如果是这样的话,那就这么说,我会充实一个例子。

答案 1 :(得分:0)

获取进程状态时,

SSH有点过分,我建议改为使用SNMP

例如,您可以获得这样的流程列表:

snmpwalk -v2c -cPASSWORD HOST 1.3.6.1.2.1.25.4.2.1

查看处理检查的this Nagios插件,并查看code中的实际SNMP OID。