Magazine Internet

Extreme sysadmin

Publié le 21 novembre 2007 par Peck
Niveau :
Résumé :  Test::Harness


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
En détail :
  • 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
  • Lancer le test
  • 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

D'où la crontab
MAILTO=moi@chez.moi
00 07 * * * /usr/local/bin/autotest.cron

Vous pourriez être intéressé par :

Retour à La Une de Logo Paperblog

Ces articles peuvent vous intéresser :

A propos de l’auteur


Peck Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte

Dossier Paperblog