« 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 !”
Ping : Script Python pour WLST : "Un script pour les redémarrer tous" - EASYTEAM
Ping : Libérer de l'espace sur les serveurs Oracle Weblogic - EASYTEAM
Les commentaires sont fermés.