On a des scripts qui tourne dans tous les sens, la plupart tourne à heure fixe et donc on est assez tranquille, par contre il y en a certains qui doivent tourner en non-stop, et évidemment ils plantent quand il ne faut pas : a 2h du mat quand c’est un script très critique pour votre application, ou au moment ou vous voulez vous en servir pour les autres (par exemple un serveur de jeu type minecraft)
Le but de ce tuto est donc de voir comment détecter si un script tourne ou non, et s’il a planté de le relancer
Table des matières
Le if de la mort :
if [ $(ps aux | grep -e 'process_name$' | grep -v grep | wc -l | tr -s "\n") -eq 0 ]; then process_name; fi
Pour ceux que ca intéresse la commande en détail :
– ps aux : liste les process en cours d’execution
– grep -e ‘process_name$’ : liste ceux qui contiennent le nom de process qui nous intéresse (nom à choisir intelligement, « php » n’est pas très pertinent, alors que « scriptquidoittournertoutletemps.php » devrait mieux marcher)
– grep -v grep : on exclue des résultats le grep précédent
– wc -l : on compte le nombre de lignes retournées
– tr -s « \n » : on supprimer les retours à la ligne
Le if test si le résultat de la commande est 0, si c’est le cas on relance le process
Création du script :
echo 'if [ $(ps aux | grep -e "$1\$" | grep -v grep | wc -l | tr -s "\n") -eq 0 ]; then $*; fi' > $(echo $PATH | awk -F: '{print $2}')/chup; chmod a+x $(echo $PATH | awk -F: '{print $2}')/chup
Vous avez maintenant la commande chup disponible sur votre sytème
Utilisation :
chup monscript chup /usr/bin/java -Xmx1024M -Xms1024M -jar /minecraft/minecraft_server.jar nogui chup asterisk -gcvvvv
Comme vous le remarquez on peut mettre tous les paramètres nécessaires à notre script, ils seront utilisés par le grep puis pour le relancer si besoin
Evidemment on configurera cette commande dans le crontab pour vérifier régulièrement que nos scripts tournent
Vous pouvez facilement adapter le script pour vous envoyer un mail à chaque restart du process, histoire d’être un minimum au courant si votre script redémarre 200 fois par jour 🙂
Source : Andy Hawkins