Journal Incron :: inotify cron system

Posté par  .
Étiquettes : aucune
45
20
mar.
2009
Voilà, je voulais faire un petit nourjal pour faire découvrir ce petit logiciel que je viens de découvrir et que je trouve absolument fabuleux, à savoir Incron¹.

Incron se base sur l'API inotify, il est d'ailleurs développé par ses auteurs, et fonctionne comme Cron (d'où le nom), à la seule différence qu'il est non pas basé sur le temps, mais sur la surveillance d'un répertoire ou d'un fichier.

C'est-à-dire que l'on peut le configurer pour surveiller un répertoire, et lors de la création, la modification, la suppression d'un fichier dans ce chemin, ou tout autre évènement de ce genre, il lance une tâche adaptée à la situtation.

Les incrontab se trouvent dans /etc/incrond.d/ à la manière de Cron, et leur format est tout simple :

path event command

« event » étant bien sûr l'un des évènements possibles, pour en voir la liste, suffit d'ouvrir le fichier inotify.h des sources du noyau (c'est un peu dommage de devoir chercher la doc dans les sources...).
Il est également possible de passer des paramètres à la commande (le chemin, l'événement, etc).

Pour l'installation, rien de plus simple que « yum install incron » ou « apt-get install incron » pour les distribs que je connais; j'imagine que pour les autres elle doit également être packagée.

Voilà, c'était pas grand chose, mais je suis tombé dessus par hasard, ça m'a fait gagné un temps fou (pour l'anecdote, j'avais besoin qu'Apache soit relancé à chaque création d'une conf dans /etc/httpd/conf.d, et j'étais parti sur l'écriture d'un script à la mano).

Alors comme ça m'a semblé assez peu connu alors que c'est un truc excellent qui laisse pleins de possibilités, j'en ai fait un petit journal pour tous ceux ici qui un jour risquent d'en avoir besoin.



¹ : http://inotify.aiken.cz/?section=incron&page=about&lang=en
  • # fallait le dire plus tot...

    Posté par  . Évalué à 10.

    moi qui me faisait chier avec inotifywait, du shell et de l'huile de coude...

    merci !
  • # Bien vu

    Posté par  (site web personnel) . Évalué à 6.

    Effectivement un outil comme ca ca peut toujours servir et je connaissais pas.

    Merci de l'avoir présenté.
  • # Mouais

    Posté par  (site web personnel) . Évalué à 2.

    pour l'anecdote, j'avais besoin qu'Apache soit relancé à chaque création d'une conf dans /etc/httpd/conf.d, et j'étais parti sur l'écriture d'un script à la mano

    Mouais je ferais pas ça à la création, plutot à la fermeture après modification, et une verification de la syntaxe avant :)
    • [^] # Re: Mouais

      Posté par  . Évalué à 3.

      Bah c'est juste un reload, pas un restart, s'il y a une erreur, il ne prend pas le fichier en compte, c'est tout.

      Et il faut remettre dans le contexte : la conf nouvellement créée l'est par copie d'un template modifié à coup de sed et de tr; le risque d'erreur est quasi nul.

      Article Quarante-Deux : Toute personne dépassant un kilomètre de haut doit quitter le Tribunal. -- Le Roi de Cœur

  • # Petit oubli

    Posté par  . Évalué à 4.

    j'ai oublié d'ajouter cette question dans le journal, mais est-ce qu'il existe un équivalent sous Windows ? C'est pas pour faire celui qu'a la plus grosse (quoique...) mais c'est toujours intéressant de savoir ce que propose la concurrence et s'il y a chez nous d''éventuels défauts à gommer.

    Article Quarante-Deux : Toute personne dépassant un kilomètre de haut doit quitter le Tribunal. -- Le Roi de Cœur

    • [^] # Re: Petit oubli

      Posté par  (site web personnel) . Évalué à 0.

      Sous windows, je sais pas. Sous os x, il y a launchd, et sous linux, upstart devrait le faire à terme.

      Je te conseile de regarder la video sur google tech talk, pour launchd ( http://video.google.com/videoplay?docid=1781045834610400422 ), et celle sur upstart ( http://fosdem.unixheads.org/2009/maintracks/ ), pour avoir plus d'info.
    • [^] # Re: Petit oubli

      Posté par  . Évalué à 7.

      Sous windows, tu peux utiliser WMI. Quelques lignes de script pour creer un listener d'evenements sur un repertoire (creation/supression/modification). A noter que tu peux faire la meme chose pour plein d'autres evenements (genre creation de process) avec la meme API.

      Et comme tu es direct dans ton script, tu as access direct a toutes les infos sur le type de modif (un peu comme si tu passais tous les parametres possibles a la commande avec incrond).

      Ah et comme c'est un service global du systeme, tu as access a l'API depuis vbscript/jscript/vb/c#/c++ OOB (equivalent a inotify - pour la partie FS).
  • # Problème avec certaines éditeurs

    Posté par  . Évalué à 4.

    Apparement ça ne marche pas bien avec certains éditeurs (tel que vim ou gedit).
    En effet lorsque l'on édite un fichier avec ceux-ci, ils décident parfois de renommer le fichier existant et d'en créer un nouveau plutôt que d'écraser le fichier original, ce qui a pour effet de supprimer la surveillance sur le fichier.
    Sous vim il est possible de contrôler ce comportement avec l'option set backupcopy (à positionner à yes pour forcer l'éditeur à modifier le fichier existant).
  • # ... et lsyncd (pour du rsync déclenché par inotify)

    Posté par  . Évalué à 10.

    Dans la même catégorie d'outils sympas, il y a aussi lsyncd. Celui-ci synchronise des fichiers et répertoires par rsync en cas de changement détecté par inotify.

    Auparavant j'utilisais des rsync lancés en boucles infinies, ce qui avait pas mal de désavantages : cela consomme des I/O disque inutilement (du fait de la traversé permanente de l'ensemble de l'arborescence sur la source et sur les mirroirs), cela consomme de la bande passante et du temps de calcul inutilement (tout les fichiers de l'arborescence sont comparés), et ne distribue effectivement les modifications qu'avec un inutile retard (le temps qu'il ai refait un tour de boucle, donc une traversée de l'arborescence et qu'il découvre le fichier modifié).

    Lsyncd au contraire réplique *immédiatement* tout fichier ou répertoire modifié, et uniquement lui, et dort le reste du temps.

    http://code.google.com/p/lsyncd/
  • # Un peu hors-sujet mais bon

    Posté par  . Évalué à 2.

    apt-get install incron
    Il serait peut-être temps de passer à aptitude : http://www.debian.org/doc/manuals/debian-faq/ch-pkgtools.fr.(...)
    • [^] # Re: Un peu hors-sujet mais bon

      Posté par  . Évalué à 2.

      Aptitude met encore 5 minutes de plus que apt sur mon NSLU2 (proc arm+ram 32Mo). Donc apt a encore une raison d'être.
    • [^] # Re: Un peu hors-sujet mais bon

      Posté par  . Évalué à 7.

      Je suis tout à fait d'accord, et il me semble qu'aptitude soit la solution recommandée depuis Etch (donc depuis au moins deux ans), cependant je n'ai pas encore réussi à m'y faire.

      C'est sur que c'est sympa d'avoir un outil unique pour tout faire (il rassemble les fonctions d'apt-get, apt-cache, apt-mark et d'autres), mais c'est autant une question d'habitude que de fonctionnalités : je n'ai par exemple pas trouvé l'équivalent à "apt-cache policy", dont j'use et abuse.

      Par ailleurs, si l'algorithme de résolution des dépendances est assez impressionant, il n'est pas toujours pertinent par rapport à la situation que je souhaite atteindre.
      De plus, je n'aime pas qu'il décide tout à ma place, notamment de supprimer par défaut les paquets prétendus inutiles, alors que je sais que juste après, je vais installer un paquet dépendant d'eux (c'est inutile de supprimer pour réinstaller juste après).

      Et puis il manque encore des outils comme apt-file et apt-show-versions. Je suis plus efficace avec cette multitude d'outils que je connais qu'avec un seul qui ne fait pas tout ce dont j'ai besoin.

      Article Quarante-Deux : Toute personne dépassant un kilomètre de haut doit quitter le Tribunal. -- Le Roi de Cœur

  • # /etc/httpd/conf.d…

    Posté par  . Évalué à 0.

    est sensé être géré par les paquets
    • [^] # Re: /etc/httpd/conf.d…

      Posté par  . Évalué à 2.

      Pas faux.

      Cependant, mon besoin était que les utilisateurs puissent eux-mêmes gérer un ensemble de sites publiés; je n'ai vu que cette solution pour développer rapidement un truc utilisable.

      Après, c'est sûr, on peut toujours écrire quelque chose de très élaboré et complètement respectueux des conventions du système, mais je n'avais pas vraiment le temps (ni les compétences, je ne suis pas développeur).

      Article Quarante-Deux : Toute personne dépassant un kilomètre de haut doit quitter le Tribunal. -- Le Roi de Cœur

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.