2010-07-13 53 views
0

该函数花费大量的时间来计算进程的状态,比如每次必须ssh进入机器并查找进程的状态。通过减少ssh的数量来提高代码的执行效率

我只有四台机器和周围50多个进程,以监督和细节被提及到configDaemonDetails.txt

,如:

[email protected]|Daemon_1|processname_1 
[email protected]|Daemon_2|processname_2 
[email protected]|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

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

+0

如何提供文件中的所有进程名称到ps -ef? – Joice 2010-07-13 11:14:21

+0

不要一次提供全部。从远程计算机上获取ps -ef的ENTIRE输出,并在本地计算机上处​​理它。或者如果这太多,如果所有特效都在同一个帐户下运行,则可以执行ps -uf {用户名}。 – MJB 2010-07-13 11:17:08

+0

好的我知道了..非常感谢 – Joice 2010-07-13 11:20:17

0

SSH对于获取进程状态有点过分,我建议使用SNMP来代替。

e.g,你可以得到一个进程列表如下:

snmpwalk -v2c -cPASSWORD HOST 1.3.6.1.2.1.25.4.2.1 

看看this Nagios的插件,做过程检查,并查看code的实际SNMP的OID。

+0

我一定会试试...谢谢 – Joice 2010-07-13 12:24:17