voici une mise à jour du script MULTI_PROC.sh
ce script, permet de paralléliser le lancement de scripts.
attention, ce script a été conçu pour fonctionner depuis Solaris uniquement.
n’oubliez pas de changer les chemins à différents binaires pour un autre OS.
voici le script de parallélisation
et voici 1 exemple de script a donner en argument à MULTI_PROC.sh
ce dernier permet d’arrêter un serveur Sun, Linux ou HP-UX
#!/bin/ksh # ce programme est cense etre lance par le programme multi_remote.sh # # codes retour: # RVAL - 150 - I didn't received the server name # RVAL - 200 - you must modify the nagios downtime end time # RVAL - 170 - the first disk sync is failed # RVAL - 172 - the second disk sync is failed # RVAL - 212 - ping HS [ -z "$ARGUMENT_TO_WORK" ] && { echo "ERROR : the ARGUMENT_TO_WORK variable is not set" exit 150 } /usr/sbin/ping $ARGUMENT_TO_WORK 2 >/dev/null 2>&1 if [ "$?" = "0" ] then /usr/bin/ssh -q -o PreferredAuthentications=publickey -o StrictHostKeyChecking=no -n ${ARGUMENT_TO_WORK} "PATH=\$PATH:/bin:/sbin:/usr/bin:/usr/sbin export PATH case \`uname -s\` in SunOS) eeprom \"auto-boot?\"=true || exit 4 sync || exit 170 sync || exit 172 init 5 2>&1 || exit 3 ;; Linux) shutdown -h now 2>&1 || exit 3 ;; HP-UX) cd / setboot -b on /usr/sbin/shutdown -h -y now |while read line do echo \"\${line}\" [ -n \"\$(echo \"x\${line}\" |grep \"xTransition to run-level 0 is complete\")\" ] && exit 0 done ;; *) echo \"\`uname -s\` non supporte\" exit 1 ;; esac " REMOTE_VAL=$? exit $REMOTE_VAL else echo "ERROR: can't ping $ARGUMENT_TO_WORK" exit 212 fi
explication du fonctionnement:
# ./MULTI_PROC.sh -e './stop_server.sh' -f /tmp/server_liste.txt
le script ‘stop_server.sh’ va être lancé autant de fois que le nombre de serveurs à traiter dans le fichier /tmp/server_liste.txt.
et pour chaque lancement, stop_server.sh va récupérer l’argument (le nom du serveur) en cours sous la forme de la variable ARGUMENT_TO_WORK.
stop_server.sh est donc simplement un script qui va se connecter en ssh sur le serveur $ARGUMENT_TO_WORK et l’arrêter.
il est conseillé de gérer les erreurs dans le script qui va être parallélisé en sortant avec un numéro d’erreur prédéfini cat MULTI_PROC.sh sait gérer les codes retour, et garde l’historique de tout le script si le code retour n’est pas zéro.
tout au long du déroulement du programme, à chaque fois qu’un thread se termine, ça s’affiche à l’écran, avec un rapport sur l’évolution de la totalité du traitement.
à chaque fois qu’une erreur est détectée, elle s’affiche et est logguée.
lorsque tout les traitements sont terminés, un résumé de toutes les erreurs rencontrées s’affiche.
exemple de sortie:
# ./MULTI_PROCESS.dev.sh -e './test_ssh_cnx.sh' -f /tmp/list_of_3_servers.txt -- --> Analysing arguments -- --> End of analysing arguments # RVAL - 150 - I didn't received the server name # RVAL - 212 - ping HS -- --> We have 3 Args to run -- --> LIMIT defined to 10 machine_1 (1/3 - 33.33%) : ERROR: Rval=212 - take a look at the /var/tmp/machine_1.212.RVAL file machine_3 (2/3 - 66.66%) : ERROR: Rval=212 - take a look at the /var/tmp/machine_3.212.RVAL file machine_2 (3/3 - 99.99%) : finished Errors detected : machine_1 : ERROR: Rval=212 - look at the /var/tmp/machine_1.212.RVAL file machine_3 : ERROR: Rval=212 - look at the /var/tmp/machine_3.212.RVAL file #