lundi 6 octobre 2014

SCRIPT SHELL – RELANCE AUTOMATIQUE DE SERVICE

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.
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

Aucun commentaire:

Enregistrer un commentaire