Relance automatique de service
Un des problèmes majeurs pour un administrateur système est le fait de devoir se connecter à son serveur uniquement pour relancer un service qui s’est arrêté. Certes, il est possible de mettre un cronjob qui le relance chaque minute, mais si le besoin est moins d’une minute. Ci-dessous, un petit script shell qui s’en occupe toute les 5 secondes.
Donc on commence avec la déclaration qu’il s’agit d’un script shell:
#!/bin/sh
Ensuite, on déclare une petite fonction renvoi le pid du notre process sinon 0 si le process n’est pas lancé:
pid() { if [ -n "`ps uax | grep nom_process |grep -v 'grep\|etc'|tr -s ' '|cut -d' ' -f2|head -n 1`" ]; then echo -n 1 return fi echo -n 0 }
Et on termine avec une « boucle infinie » qui vérifie si le service est lancé sinon elle le relance et écrit dans deux fichiers logs avec la date:
while [ 1 ] do if [ "`pid`" != "0" ]; then echo `date "+%d/%m/%y %T nom_process est en cours d'exécution ... rien à faire."` >>/var/log/nom_process.chk else echo `date "+%d/%m/%y %T nom_process s'est arrêté ^_^ Redémarrage ..." >>/var/log/nom_process_restart.log` /usr/local/bin/nom_process fi sleep 5 done
Bien sûr, il ne faut pas oublier de rajouter les éventuels paramètres du service dans votre script shell. Aussi, pensez à vérifier la taille des fichiers log de temps à autre pour éviter que ça prenne trop d’espace disque.
Le format de la date utilisé ici est jj/mm/aaaa. Vous pouvez changer la disposition en changeant l’ordre des %d, %m et %y. %T indique que le texte à afficher après la date.
Le format de la date utilisé ici est jj/mm/aaaa. Vous pouvez changer la disposition en changeant l’ordre des %d, %m et %y. %T indique que le texte à afficher après la date.
Vous mettez le script avec les droits chmod 755 et vous le lancer en arrière plan avec « & » : ‘./script &’
Le script shell entier:
#!/bin/sh pid() { if [ -n "`ps uax | grep oscam |grep -v 'grep\|etc'|tr -s ' '|cut -d' ' -f2|head -n 1`" ]; then echo -n 1 return fi echo -n 0 } while [ 1 ] do if [ "`pid`" != "0" ]; then echo `date "+%d/%m/%y %T Oscam is running, nothing to do."` >>/var/log/oscam.chk else echo `date "+%d/%m/%y %T Oscam hanged ^_^ Restarting process ..." >>/var/log/oscam_restart.log` /usr/local/bin/oscam -b fi sleep 5 done