Tips en Trucs 2012

Incron reageert op bewerkingen op bestanden

Inotify is een Kernel functie die bij veranderingen aan een bestandssysteem actief wordt. Deze veranderingen worden aan luisterende programma's doorgegeven waardoor deze op de veranderingen kunnen reageren. Inotify vervangt het voordien gebruikte dnotify.

Incron is zo'n luisterend programma. Het bestaat uit een dienst (service, daemon) en een tabeleditor. Je gebruikt incron op dezelfde manier als het alom gekende cron. Het enige verschil tussen cron en incron is dat incron bewerkingen (scripts) uitvoert bij veranderingen in het bestandssysteem, terwijl cron bewerkingen in functie van de tijd uitvoert.

Waarvoor kun je incron gebruiken?

Incron levert een eenvoudige oplossing voor veel voorkomende situaties. Alle taken die iets te maken hebben met bestanden of mappen kunnen door incron verwerkt worden.

Een paar voorbeelden:

Installatie

Voor openSUSE 12.1 (en 12.2 RC) kun je incron installeren via de site software.opensuse.org. Aangezien bij openSUSE incron nog niet is ingeburgerd, zoek je het pakket in de unstable packages in de softwarebron utilities. Bij veel andere distributies is het reeds in de standaard softwarebron opgenomen.

Incron gebruiken

Incron gebruik je zoals cron, de manier van werken is een kloon van cron.

Elke gebruiker die incron mag gebruiken, mag de incrontab opdracht gebruiken om zijn eigen lijst met gebeurtenissen en bijhorende opdrachten te bekijken of aan te passen. Deze taken worden door de daemon verwerkt. Bij het voorkomen van een gebeurtenis wordt de bijhorende opdracht uit de lijst uitgevoerd.

Om een lijst van gedefinieerde gebeurtenissen met bijhorende opdrachten te bekijken, gebruik je de opdracht:
incrontab -l
Indien de gebruiker incron niet mag gebruiken, wordt een foutbericht weergegeven.

Je kunt op de volgende manieren de gebruiker root toestemming geven om incron te gebruiken:

Een regel (item) uit de tabel met gebeurtenissen en bijhorende opdrachten heeft de volgende samenstelling (gebruik spaties om de drie onderdelen te scheiden):
[Pad] [masker] [opdracht]

Waarbij: De volledige lijst met maskers (gebeurtenissen):

Het masker kun je tegen lussen beschermen door het speciale symbool IN_NO_LOOP waarmee je bij het afhandelen van een opdracht het verwerken van gebeurtenissen even stil legt.

De opdracht kan gebruik maken van de volgende plaatshouders (variabelen, wildcards):

/tmp/spool IN_CLOSE_WRITE /usr/local/bin/run-spool $@/$#
bewaakt de map /tmp/spool en bij het optreden van een IN_CLOSE_WRITE gebeurtenis wordt de opdracht /usr/local/bin/run-spool met de bestandnaam van het gesloten bestand als argument uitgevoerd.

Praktisch voorbeeld

Het volgende script maakt een backup van alle aangepaste bestanden in de map /etc/ en /home/dany/mijnProject:
#!/bin/sh
# /root/inotify.sh

# maak indien nodig een inotify backup map
mkdir -p /var/backups/inotify

# maak een kopie van het bestand met bijhorende pad
cp -p --parents $1 /var/backups/inotify

# geef het bestand een bijhorende datum-tijd stempel
mv /var/backups/inotify$1 /var/backups/inotify$1_`date +'%Y-%m-%d_%H:%M'`

Maak het script uitvoerbaar voor root met de opdracht:
chmod 755 /root/inotify.sh

Normaal zou je met de opdracht incrontab -e de tabel met gebeurtenissen kunnen opstellen, dit werkt echter niet in openSUSE (opgelet: deze opdracht gebruikt standaard de editor vi). De opdracht joe /etc/incron.d/incrontab doet het echter wel en joe is een stuk gebruiksvriendelijker dan vi. De incron tabel wordt:
/etc IN_MODIFY,IN_CLOSE_WRITE /root/inotify.sh $@/$#
/home/dany/mijnProject IN_CLOSE_WRITE /root/inotify.sh $@/$#

Elke keer dat er in de bewaakte mappen een bestand wordt opgeslagen, wordt onmiddellijk een backup gemaakt.

Om het geheel te testen, start je de incron daemon met de opdracht:
systemctl start incron.service

Na een grondige test en de vaststelling dat alles naar behoren werkt, kun je de incron daemon automatisch bij elke computerstart activeren met de opdracht:
systemctl enable incron.service