Script Shell pour redémarrer les services en cas d’arrêt ou de panne

Il est fréquent que le processus se bloque ou s’arrête pour diverses raisons. Vous pouvez enquêter et résoudre les problèmes, mais cela peut prendre un peu de temps.

Cependant, une chose que vous pouvez faire immédiatement pour réduire le temps d’arrêt et améliorer la disponibilité est d’automatiser le redémarrage du processus s’il est arrêté.

Pour ce faire, nous allons utiliser l’autoroute : les scripts shell

Vous pouvez utiliser les scripts shell suivants pour les exécuter via la crontab, qui vérifieront les services toutes les 15 minutes (vous pouvez ajuster l’intervalle de temps) et les démarreront s’ils ne fonctionnent pas. Vous trouvez ça cool?

Dans cet article, je vais vous donner deux exemples de démarrage des services en cas d’arrêt.

Si vous utilisez CentOS/RHEL 7, vous pouvez également consulter cet article expliquant comment utiliser systemd pour redémarrer.

Redémarrer automatiquement MySQL, PHP-FPM, Nginx en cas de panne

Il y a quelques semaines, j’ai déplacé Geek Flare sur DigitalOcean avec EasyEngine et MariaDB a planté deux fois en une semaine.

mariadb-crashed

Vous voyez, il a planté tôt le matin et est resté hors service pendant plus de 3 heures, ce qui n’est pas bon. C’est mon blog, donc pas d’impact en $$$, mais je me sens quand même mal pour lui.

Ok, c’est l’heure du spectacle maintenant..

  • Créez un fichier à l’aide de l’éditeur vi à l’emplacement de votre choix (dans cette démo, je le placerai sous /opt/startifdown.sh)
  • Copiez et collez le script ci-dessous dans le fichier et sauvegardez-le
#!/bin/bash
#Scripts pour démarrer les services s'ils ne sont pas en cours d'exécution
ps -ef | grep nginx |grep -v grep > /dev/null
if [ $ ? != 0 ]
then
       /etc/init.d/nginx start > /dev/null
fi
ps -ef | grep php5-fpm |grep -v grep > /dev/null
if [ $ ? != 0 ]
then
       /etc/init.d/php5-fpm start > /dev/null
fi
ps -ef | grep mysql |grep -v grep > /dev/null
if [ $ ? != 0 ]
then
       /etc/init.d/mysql start > /dev/null 
fi
  • Modifiez la permission du fichier pour qu’il soit exécutable
chmod 755 startifdown.sh

Testez-le manuellement pour vous assurer que le script est exécutable.

Vous pouvez arrêter le service et utiliser le script pour vérifier s’il démarre. Une fois que vous êtes satisfait, vous pouvez placer ce script dans cron pour qu’il s’exécute toutes les 15 minutes.

*/1 * * * * * /opt/startifdown.sh

Reportez-vous à mon article sur la crontab si vous avez besoin d’inspiration pour modifier l’intervalle de temps.

Maintenant, ce petit script s’occupera de démarrer les services en cas de crash et je n’aurai pas ces 3 heures d’indisponibilité.

C’est beaucoup mieux !

Redémarrage automatique de WebSphere DMGR, Nodeagent, JVM en cas de panne

Créez un fichier avec les scripts suivants – je l’appellerai startwasifdown.sh

#!/bin/bash
#Scripts pour démarrer les services s'ils ne sont pas en cours d'exécution
#Spécifiez le chemin DMGR ici
DMGR=/opt/IBM/WebSphere/AppServer/profiles/Dmgr01
#Spécifiez le chemin du profil ici
Profile=/opt/IBM/WebSphere/AppServer/profiles/AppSrv01
ps -ef | grep dmgr |grep -v grep > /dev/null
if [ $ ? != 0 ]
then
       $DMGR/bin/startManager.sh > /dev/null
fi
ps -ef | grep nodeagent |grep -v grep > /dev/null
if [ $ ? != 0 ]
then
       $Profile/bin/startNode.sh > /dev/null
fi
ps -ef | grep server1 |grep -v grep > /dev/null
if [ $ ? != 0 ]
then
       $Profile/bin/startServer.sh server1 > /dev/null
fi

Remarque : modifiez le chemin d’accès en fonction de votre environnement et ajoutez des lignes supplémentaires si vous avez plus d’une JVM.

  • Modifiez la permission du fichier pour qu’il soit exécutable
chmod 755 startwasifdown.sh

Testez-le manuellement, et une fois que vous en êtes satisfait, vous pouvez placer ceci dans cron pour l’exécuter toutes les 15 minutes ou ce qui vous convient.

*/1 * * * * * /opt/ startwasifdown.sh

Il s’agit juste d’une ligne directrice pour vous permettre d’automatiser les choses.

Vous aimez l’automatisation ? Apprenez à utiliser les scripts de l’interpréteur de commandes bash.