De Linux-kernel bevat sinds versie 2.6.13 inotify, een component waarmee je allerlei bestandsacties kunt monitoren, zoals veranderingen in bestanden en directory's, het aanmaken van nieuwe bestanden, het lezen van bestaande bestanden, enzovoort. Een gebruiksvriendelijke wrapper hier omheen is incron, een daemon die ongeveer hetzelfde werkt als cron, maar met het essentiële verschil dat de geconfigureerde taken niet periodiek maar bij het voorkomen van specifieke bestandsoperaties uitgevoerd worden.

Incron kun je voor verschillende doeleinden gebruiken. Je kunt bijvoorbeeld bij veranderingen aan configuratiebestanden de bijbehorende serverdaemon de configuratie automatisch opnieuw laten inlezen. Of je kunt statistieken van bestandsoperaties bijhouden om achteraf te analyseren. Of je kunt automatisch een e-mail aan de systeembeheerder sturen na een bestandsupload op een ftp-server. Elke taak die afhangt van bestandsoperaties is met incron te realiseren.

Aan de slag

We gaan ervan uit dat je Linux-kernel inotify ondersteunt. Verifieer dit met de volgende opdracht:

$ grep INOTIFY /boot/config-$(uname -r)

CONFIG_INOTIFY=y

CONFIG_INOTIFY_USER=y

Installeer daarna het pakket incron en start de daemon incrond. Voeg nu je gebruikersnaam toe in het bestand /etc/incron.allow. Creëer daarna met de opdracht incrontab -e een 'incrontab'-bestand aan, en plaatst hierin bijvoorbeeld de volgende regel:

/home/gebruikersnaam IN_ALL_EVENTS /home/gebruikersnaam/notify_files.sh $# $%

De $# staat voor de bestandsnaam (relatief ten opzichte van het basispad op het begin van de regel) en $% staat voor de bestandsoperatie, bijvoorbeeld IN_OPEN, IN_ACCESS, IN_CREATE, enzovoort. De operatie IN_ALL_EVENTS in deze regel is een mask die wordt geactiveerd bij elke mogelijke bestandsoperatie.

Wat je effectief op basis van de bestandstoegangen in de directory /home/gebruikersnaam doet, specificeer je in het shell-script notify_files.sh, waaraan je de bestandsnaam en bestandsoperatie als parameters doorgeeft. Wil je bijvoorbeeld notificaties voor al deze toegangen zien, dan kan dat met dit eenvoudig script (dat wel het pakket libnotify-bin vereist voor het commando notify-send):

#!/bin/bash

DISPLAY=:0.0 /usr/bin/notify-send "File: $1" $2

Automatisch configuratiewijzigingen inlezen

Als het voorgaande werkt, dan kun je specifiekere acties laten uitvoeren. Met de volgende incrontab-regel kun je bijvoorbeeld de OpenSSH-server de configuratie automatisch opnieuw laten inlezen bij een wijziging van het configuratiebestand:

/etc/ssh/sshd_config IN_MODIFY IN_CREATE IN_DELETE IN_MOVE killall -HUP sshd

Telkens als het configuratiebestand sshd_config wordt gewijzigd, gecreëerd, gewist of verplaatst, laten we sshd in dit voorbeeld zijn configuratie opnieuw inlezen. Aangezien we deze taak als root willen laten uitvoeren, kan dit wel niet in een incrontab-bestand van een normale gebruiker, maar maken we dit bestand aan in /etc/incron.d/sshd_config. In de directory /etc/incron.d/ kun je allerlei incrontab-bestanden aanmaken die door incrond ingelezen worden en waarvan de taken als root uitgevoerd worden.

Voor meer informatie over de werking van incron verwijzen we je naar de documentatie en de FAQ, evenals naar de website van inotify. Lees ook de man-pagina's van incrond(8), incron.conf(5), incrontab(1) en incrontab(5).