System-Linux

Aller au contenu | Aller au menu | Aller à la recherche

Surveillance simple de services unix

Petit script bash de surveillance d'un service Unix tel sshd, apache, bind9 etc...

Certaines services système sont plus fragile que d’autres. Par exemple, dans le cas de l’administration d’un serveur distant, le processus sshd, httpd, ou named Voici donc un petit script que j’utilise sur mes serveurs pour relancer ces processus en cas ou ils seraient arrêté (suite à un bug ou autre).

#!/bin/sh
# /opt/bind9/sbin/named_sentinelle.sh
PROC_NOM=named
PROC_COMMANDE=’ /opt/bind9/sbin/named’
ps auwx | grep -v grep | grep $PROC_NOM > /dev/null || $PROC_COMMANDE

On rends alors ce script exécutable seulement par l’utilisateur qui doit lancer le processus :

chmod 700 /opt/bind9/sbin/named_sentinelle.sh

Puis on demande au système d’exécuter ce script toute X minutes ici toutes les minutes :

    
crontab -e
* * * * * /opt/bind9/sbin/named_sentinelle.sh > /dev/null 2>&1

et voila :) pour tester ce dispositif killer votre processus et regardez si votre scripts sentinelle le relance.

Par GanGan | le mardi, janvier 6 2009 18:45

Commentaires

1. redmail

mardi, janvier 6 2009 | 19:18

C'est simple et efficace.

Mais tu devrais l'améliorer par exemple en envoyant un mail à l'admin afin qu'il soit au courant des plantages de service.

2. gangan

mardi, janvier 6 2009 | 22:58

merci
bin va s'y propose :)
avec la commande mail ?

3. Kévin Hinault

mercredi, janvier 7 2009 | 11:06

J'allais faire le même commentaires que redmail. Je préfère savoir qu'un service est tombé plutôt qu'il se relance automatiquement, s'il est tombé c'est qu'il y a une raison, auquel cas un fix est peut être nécessaire ;)

D'un autre côté ton script ne sait pas gérer les instances multiples de plusieurs processus ayant le même nom : je pense par exemple a pureftpd qui se fork mais le père peut très mourir et pourtant les fils continuent à vivre.
A choisir je préfère un seul script non générique connaissant les emplacements des pid de mes services et les testant un par un. Si un service n'écrit pas son pid, on peut le forcer dans son init.d en faisant un echo $! > /var/run/pidduservice.pid après l'exécution du service (attention ça ne marche pas si celui-ci se fork pour se détacher du terminal)

Dernier point qui me gène : tu relances tes services directement comme ça, si les scripts /etc/init.d existent il est préférable de les utiliser je pense.

4. gangan

mercredi, janvier 7 2009 | 11:18

comme j'ai tendance a compiler meme quand c'est pas utile :p j'ai pas tout le temps un beau script d'init c'est pour ca.

PROC_COMMANDE=’ /opt/bind9/sbin/named’
peut etre remplacé par ceci en effet :

PROC_COMMANDE=’ service bind9 start’
PROC_COMMANDE=’ invoke-rc.d bind9 start’

merci pour les remarques !