Août 122011
 

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

Download : MULTI_PROCESS.sh


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

Download : stop_server.sh

#!/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
#

 Laisser un commentaire

Vous pouvez utiliser ces tags et attributs HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(requis)

(requis)

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.