Cet article est maintenant sur http://linux-attitude.fr/post/Extreme-sysadmin
Niveau :
Régulièrement vous avez des problèmes sur vos machines. C'est normal, ça arrive à tout le monde. La plupart du temps on corrige le problème et c'est fini. Nooooonnnnn ... C'est mal !
Il ne faut pas corriger le problème. Il faut
- S'assurer que le problème n'a pas d'impact
- Faire un script qui vérifie que le problème est présent
- Corriger le problème
- S'assurer que le script renvoie ok
- Compléter le script par des commentaires
- 1- Bon si vous n'avez pas le point 1 (ça s'explique très bien par le manque de moyens et plus rarement par le manque de temps) inversez les étapes 2 et 3, on fera avec.
- 2- C'est lourd ce que vous me proposez là ! Oui, mais non, c'est un travail qui se prépare, vous devez déjà avoir un système de vérification disponible, et donc votre script sera très court. Par exemple :
[ -x /usr/bin/perl ] & echo ok
- 3- OK, c'est votre boulot
- 3.5- Itérez sur 2 si ça ne fonctionne toujours pas.
- 4- Simple, ça prouve que vous avez bien écrit votre script et que vous avez corrigé le problème.
- 5- Vu que vous avez corrigé le problème, ajoutez un commentaire sur le pourquoi du comment, voire un check supplémentaire qui détectera la prochaine arrivée du problème.
Ainsi lors du prochain incident, la procédure commencera par
- 0- Si ce test est ok on continue, sinon on lit les commentaire et c'est fini
Mieux, vous pouvez lancer les tests régulièrement et ainsi prévenir les problèmes.
Bon, il vous faut un infrastructure de test, faisons simple (autotest.pl) :
#!/usr/bin/perl
use Test::Harness qw(&runtests $verbose $switches);
# on stockera nos tests ici
$BASE="/usr/local/tests";
$switches = "";
$verbose=1;
# on lance tous les tests qu'on y trouve
chdir($BASE);
opendir(DIR, $BASE) || die "Directory doesn't exist: $!";
@files = grep { /^[^.]/ & -x "$BASE/$_" } readdir(DIR);
closedir(DIR);
print join(",",@files)."n";
runtests(@files);
Et un script d'exemple a mettre dans /usr/local/test sous le nom que vous voulez :
#!/bin/sh
# nombre de tests dans ce fichier
echo "1..2"
if [ "`dpkg-query -W apt 2>/dev/null | grep apt`" != "" ]
then
echo "ok - apt present"
else
echo "not ok - problème"
echo "# il faut apt pour que cette machine fonctionne"
fi
echo "ok - 2e test toujours ok"
Et mettez le en cron, ça ne vous coûtera pas grand chose, de façon à ce qu'il vous envoie un mail lorsqu'il y a un problèlme (autotest.cron) :
#!/bin/sh
if /usr/local/bin/autotest.pl > /tmp/test.result
then
echo -n
else
cat /tmp/test.result
rm /tmp/test.result
fi
[email protected]
00 07 * * * /usr/local/bin/autotest.cron