2010-07-13 10 views
0

Cette fonction prend beaucoup de temps pour calculer l'état d'un processus, à chaque fois qu'il doit ssh dans la machine et trouver l'état d'un processus.Augmentez la performance du code en réduisant le nombre de ssh

Je n'ai quatre machines et autour de 50 processus de surveillance et les détails sont mentionnés dans configDaemonDetails.txt

comme:

[email protected]|Daemon_1|processname_1 
[email protected]|Daemon_2|processname_2 
[email protected]|Daemon_3|processname_3 

Comment réduire le temps avec faire une fois ssh dans un machine et trouver toutes les informations de son processus tel que défini dans le fichier 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 "-----------------------------------------------------" 

} 

Merci :)

Répondre

2

ne peux pas vous chercher juste la totalité de la production ps -ef à la fois, puis l'analyser de façon appropriée? Je suppose que c'est ce que vous demandez, et peut-être que tout ce que vous voulez est un exemple de la façon de le faire? Si tel est le cas, dites-le et je donnerai un exemple.

+0

Comment puis-je fournir tous les noms de processus du fichier à ps -ef? – Joice

+0

Ne les fournissez pas tous en même temps. Obtenez la sortie ENTIER de ps -ef sur la machine distante, et traitez tout cela sur votre machine locale. Ou si c'est trop, vous pouvez faire un ps -uf {username} si tous les procs s'exécutent sous le même compte. – MJB

+0

ok ok je l'ai eu .. merci beaucoup – Joice

0

SSH est un peu plus de tuer pour obtenir le statut d'un processus, je suggère d'utiliser SNMP à la place.

par exemple, vous pouvez obtenir une liste de processus comme celui-ci:

snmpwalk -v2c -cPASSWORD HOST 1.3.6.1.2.1.25.4.2.1 

Jetez un oeil à this Nagios plugin qui fait processus vérifie, et regardez dans le code pour l'OID SNMP réelle.

+0

Je vais sûrement essayer ça ... merci – Joice