"Dans le doute, reboot !" et si on rendait cela scriptable et modulable !

« Besoin fréquent de redémarrer un serveur Weblogic qui aurait besoin au passage d’un petit coup de balai ? »
=> J’ai peut-être ce qu’il vous faut…
Je vous propose un « framework » maison en 8 parties que j’ai pu développer en pleine mission sur un projet, afin de vous partager une approche assez modulable et adaptable dans le maintien de votre propre contexte d’environnement.
Evidemment, les chemins qui seront apparents ici doivent être mis à jour dans votre contexte ainsi que les fonctions élémentaires ou externes, car pour rappel ce script est une base de travail perfectible et adaptable.
J’ai  commenté le code afin de le rendre « auto-compréhensible ».

Ci-dessous le script bash « cleanAndRestartServer.sh » :

#!/bin/bash
# 1 - Configuration Server WEBLOGIC 11G SRV001
command=$1
domainDir=/usr/local/appli/domaine
scriptsDir=/home/weblogic/bin
adminName=ADM
nodeName1=SRV_001
nodeName2=SRV_002
info="INFO : "
warn="WARN : "
debug="DEBUG : "
erreur="ERROR : "
source $HOME/.bash_profile
# 2 - Controle des paramètres de lancement du script
checkParameters(){
	case $# in
	1)	if [ ${command} != "clean" ] && [ ${command} != "restart" ] && [ ${command} != "list" ] && [ ${command} != "kill" ] && [ ${command} != "force" ] && [ ${command} != "all" ]
		then
			echoErreur "Mauvais nom d'argument";
			usage;
			exit 99
		fi
		;;
	*)	echoErreur "Mauvaise nombre d'arguments";
		usage;
		exit 99
     ;;
	esac
}
# 3 - Affichage d'un manuel d'utilisation
usage (){
  echoInfo "Usage : $0 <clean | restart | list | kill | force | all>";
  echoInfo "Parameters :";
  echoInfo " clean   : Seul clean des caches weblogic servers (clean tmp and cache repertoires).";
  echoInfo " restart : Simple arret et relance des serveurs weblogic (sans clean).";
  echoInfo " list    : Liste les processus actifs des serveurs weblogic.";
  echoInfo " kill    : Tue les processus actifs des serveurs weblogic.";
  echoInfo " force   : Force l'arret, clean cache and redemarrage des serveurs weblogic.";
  echoInfo " all     : Arret, clean cache and redemarrage des serveurs weblogic.";
  exit 1
}
# 4 - Définitions des opérations de commandes
operationChoisie(){
	echoInfo "Operation demandee : "${command}
	case ${command} in
	"clean")	echoInfo " => Seul clean des caches weblogic servers (clean tmp and cache repertoires)."
				cleanCache
		;;
	"restart")	echoInfo " => Simple arret et relance des serveurs weblogic (sans cleean)."
				stopNodes;
				startNodes
		;;
	"list")	echoInfo " => Liste les processus actifs des serveurs weblogic."
				listNodes
		;;
	"kill")	echoInfo " => Tue les processus actifs des serveurs weblogic."
				checkNodes
		;;
	"force")	echoInfo " => Force l'arret, clean cache and redemarrage des serveurs weblogic."
				checkNodes;
				cleanCache;
				startNodes
		;;
	*)	echoInfo " => Arret, clean cache and redemarrage des serveurs weblogic."
        stopNodes;
        cleanCache;
        startNodes
     ;;
	esac
}
# 5 - Fonctions élémentaires
startNodes(){
		formatTitle "Demarrage des noeuds";
                cd $scriptsDir;
		echoDebug "Dans le repertoire : "`pwd`;
        echoInfo "Lancement Node Manager...";
                sh startnod.sh status;
                sh startnod.sh start;
                sh startnod.sh status;
        echoInfo "Demarrage serveur Admin Node Manager...";
                sh startadm-nm.sh;
                sleep 120;
		formatTitle "Lancement commande startstop-all.sh start...";
                sh startstop-all.sh start;
				# startjvmnm $nodeName2;
}
startjvmnm(){
		echoInfo "Lancement commande startjvm-nm.sh "$1"...";
        sh startjvm-nm.sh $1;
}
stopNodes(){
		formatTitle "Arret des servers";
                cd $scriptsDir;
		echoDebug "Dans le repertoire : "`pwd`;
        echoInfo "Lancement commande startstop-all.sh stop...";
                sh startstop-all.sh stop;
        echoInfo "=================";
				dateFormat;
        echoInfo "Attente de 15 minutes (arret normal weblogic)...";
                sleep 900;
                checkNodes;
}
checkNodes(){
		formatTitle "Verification de l'arret correct des noeuds";
                nbNode=`ps -ef | grep weblogic.Server | grep -v grep | grep '\('$nodeName1'\|'$nodeName2'\|'$adminName'\)' | wc -l`
                test $nbNode -gt 0 &&   echoErreur "$(date +%T) - kill du process recalcitrant de la JVM" && killingNodes || echoInfo "Aucun process recalcitrant";
        echoInfo "Verification OK"
}
listNodes(){
	ps -ef | grep weblogic.Server | grep --color Dweblogic.Name;
}
killingNodes(){
        for x in `ps -ef | grep weblogic.Server | grep -v grep | grep '\('$nodeName1'\|'$nodeName2'\|'$adminName'\)' | cut -c 10-15`; do
                echoInfo "Arret Processus numero $x...";
                kill -9 $x
        done;
}
cleanCache(){
		formatTitle "Clean caches Weblogic";
                cleanCacheServer $adminName;
				cleanCacheServer $nodeName1;
				cleanCacheServer $nodeName2;
}
cleanCacheServer(){
	cd $domainDir/servers/$1;
	echoDebug "Dans le repertoire : "`pwd`;
    echoInfo "Clean du serveur $1...";
		rm -rf tmp/* cache/* stage/*;
    echoInfo "Cache server $1 vide. (tmp, stage et cache repertoires supprimes)";
}
# 6 - Mise en page
formatTitle(){
    echoInfo "===================================";
	dateFormat;
	echoInfo "$1";
    echoInfo "===================================";
}
dateFormat(){
	echoInfo "# "`date '+%Y-%m-%d'`" "`date '+%H:%M:%S'`;
}
# 7 - Paramétrage de la verbosité
echoInfo(){
	echo $info"$1";
}
echoErreur(){
	echo $erreur"$1";
}
echoDebug(){
	echo $debug"$1";
}
# 8 - MAIN
checkParameters $@;
clear;
formatTitle "Debut maintenance :"
operationChoisie ${command};
formatTitle "Fin maintenance"
echoInfo "Log disponible ici : "$domainDir"/cleanAndRestartServer.log"
echo ""
exit 0;

 

A noter :

La fonction « USAGE » qui donne un petit mode d’emploi sur les différents cas d’usages possibles.
Pour cela, il suffira dans la console de lancer le script sans paramètres (ou avec un nom de paramètre imprévu).
 

Pour aller plus loin :

Une fois que votre script est fonctionnel, pourquoi pas le faire tourner en « crontab » sur le serveur à raison, par exemple, d’une fois tous les 2 jours comme ceci :

# Exemple crontab a definir
0 4 */2 * 1-6 cd /home/weblogic/bin; ./cleanAndRestartServer.sh all >> /usr/local/appli/domaine/cleanAndRestartServer.log 2>&1

 
 

2 réflexions sur “"Dans le doute, reboot !" et si on rendait cela scriptable et modulable !”

  1. Ping : Script Python pour WLST : "Un script pour les redémarrer tous" - EASYTEAM

  2. Ping : Libérer de l'espace sur les serveurs Oracle Weblogic - EASYTEAM

Les commentaires sont fermés.