Sécuriser un script lancé régulièrement
- 26/03/2007
Développement://
Sécuriser un script lancé régulièrementPetit incident récent : un script récurrent a mis la machine sur laquelle il tourne à genoux. Recherche et découverte du problème, et moyens d'éviter cela.
Les faits sont les suivants : un serveur pourtant largement puissant s'est mis à ramer brusquement, au point de rendre difficile l'accès via SSH ou en console directe. Après avoir un peu fouillé les journaux, le coupable a été désigné : un script d'envoi de données sur un serveur distant.
Le script est lancé toutes les cinq minutes, s'exécute en quelques secondes normalement. Problème, le serveur distant n'était pas joignable ce jour là, et le script partait en boucle infinie.
Quatre barrières auraient dû empêcher le script de bloquer la machine.
Première barrière, qui n'a pas fonctionné : un serveur devrait être capable de détecter un processus qui abuse des ressources (ou dans notre cas, une nuée de processus identiques qui abusent tous ensemble) et le couper net. Ainsi les utilisateurs ne sont aucunement impactés, et les administrateurs corrigent tranquillement le script.
Seconde barrière, inopérante également : un script PHP qui prend trop de temps ou de mémoire est arrêté par l'interpréteur. Dans notre cas la majorité du temps devait passer dans l'attente du serveur distant, et chaque script vivait donc un peu trop longtemps.
Troisième barrière, corrigée depuis : un script ne doit pas se relancer s'il est encore en fonctionnement. C'est évident... maintenant, mais sera mieux appliqué à l'avenir. Il suffit alors qu'un administrateur soit prévenu.
En début du scriptdefine('FICHIER_PID', 'envoiwebcam.pid');
if(file_exists(FICHIER_PID)) die('script lancé deux fois');
touch(FICHIER_PID);
En finunlink(FICHIER_PID);
Quatrième barrière, corrigée aussi : le script lui même n'aurait pas dû partir en boucle, mais la lecture continuait tant que les données n'étaient pas complètes... ce qui n'arrivait jamais!
Une bonne expérience, à exploiter dans le futur pour garantir que nos serveurs tournent sans faille...
Rubriques des billets
- Agilité - 15 billets
- Archerie - 8 billets
- Avis - 47 billets
- Cultures - 8 billets
- Délires - 33 billets
- Démocrachie - 3 billets
- Développement - 18 billets
- Développement web - 16 billets
- Ergonomie - 15 billets
- Geekerie - 8 billets
- Inclassable - 4 billets
- Informatique - 19 billets
- Littératures - 34 billets
- PHP - 2 billets
- Poor Lonesome Coder - 17 billets
- Régalons-nous - 6 billets
- Sortons! - 2 billets
- Travail - 14 billets
- Voyages - 2 billets
- Webmasteriat - 18 billets
Commentaires(s)
Ecrire votre commentaire
29/06/2007 - Systeme