2010-07-13 58 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