Tips en Trucs 2015

Inotifywait start script bij bestandssysteem gebeurtenissen

Back-ups maak je periodiek, bijvoorbeeld via cron of systemd. Maar je kunt ook back-ups maken telkens wanneer er iets verandert. Daarvoor kan je de inotify-tools gebruiken.

De inotify-tools zijn een verzameling opdrachten waarmee je via de inotify functie van de Linux kernel (vanaf 2.6.13) je gebeurtenissen in bestandssystemen kunt volgen.

Inotify-tools installeren

De standaard openSUSE 13.2 softwarebronnen bevatten het inotify-tools pakket niet. Je kunt het wel via de filesystems softwarebron installeren met de volgende opdracht:

dany@linux-cj0r:~> sudo OCICLI https://software.opensuse.org/ymp/filesystems/openSUSE_13.2/inotify-tools.ymp
root's password:
Als u verdergaat, dan worden de volgende installatiebronnen toegevoegd:
        * http://download.opensuse.org/repositories/filesystems/openSUSE_13.2/
Als verdergaat, dan zullen de volgende softwarepakketten worden geïnstalleerd op uw systeem:
        * inotify-tools
Continue? y/N
y
Toevoegen van installatiebronnen...

Daarbij moet je de filesystems softwarebron uw vertrouwen geven door zijn GnuGPG-sleutel te importeren. Gebruik de Tab-toets om de Vertrouwen knop te selecteren en druk Return om de GnuGPG-sleutel te importeren.

Filesystems softwarebron vertrouwen

Inotify-tools opdrachten

Inotifywait

Deze opdracht wacht op inotify gebeurtenissen en blokkeert zo het uitvoeren van de volgende opdracht in scripts. Het kan elke set bestanden en mappen in de gaten houden, zelfs recursief binnen een volledige mappenstructuur.

Inotifywatch

Inotifywatch verzamelt gebruiksstatistieken van het bestandssysteem en telt elke inotify gebeurtenis.

Deze tip beperkt zich tot het gebruik van inotifywait.

Inotify voorbeelden

dany@linux-cj0r:~> inotifywait /tmp
Setting up watches.
Watches established.
/tmp/ CREATE sh-thd-1445713640

Na het uitvoeren van de inotifywait opdracht om de /tmp/ map in de gaten te houden, werden in een tweede terminal de twee volgende opdrachten uitgevoerd:

dany@linux-cj0r:~> touch /tmp/test
dany@linux-cj0r:~> rm /tmp/test

De touch opdracht creëert het /tmp/test bestand en veroorzaakt een inotify gebeurtenis, waardoor de melding in de eerste terminal verschijnt en de inotifywait opdracht wordt afgesloten. De rm opdracht wordt dus niet meer door de inotifywait opdracht opgemerkt.

Met opties kan je inotifywait sturen:

dany@linux-cj0r:~> inotifywait -m -r -e modify,attrib,close_write,move,create,delete /tmp
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
/tmp/ CREATE test
/tmp/ ATTRIB test
/tmp/ CLOSE_WRITE,CLOSE test
/tmp/ DELETE test
^C

De -m optie zorgt voor het continu monitoren van de map, de inotifywait opdracht wordt dus na een gebeurtenis niet meer afgesloten en blijft werken tot je met de sneltoets Ctrl+C de opdracht afbreekt. De -r optie zorgt ervoor dat alle submappen van de /tmp/ map gecontroleerd worden (recursief). Met de -e optie kan je aangeven welke gebeurtenissen (events) je wilt volgen. De meldingen werden terug veroorzaakt door het uitvoeren van de twee volgende opdrachten in een tweede terminal:

dany@linux-cj0r:~> touch /tmp/test
dany@linux-cj0r:~> rm /tmp/test

Lijst inotifywait gebeurtenissen

Met de opdracht man inotifywait kan je de handleiding opvragen waarin de verschillende gebeurtenissen opgesomd staan.

Inotifywait events

Inotifywait script voorbeeld

Om de inotify gebeurtenissen continu te volgen gebruiken we een script met een eindeloze lus. Om de opdracht na de inotifywait enkel uit te voeren na een succesvolle inotifywait opdracht gebruiken we de && operator. Vanzelfsprekend kan je de regel met de sleep opdracht vervangen door uw back-up programma (of script).

dany@linux-cj0r:~> joe inotify-voorbeeld
#!/bin/bash
while true # blijf werken
do 
  inotifywait -r -e modify,attrib,close_write,move,create,delete /tmp &&
  echo "backup-script uitvoeren" &&
  sleep 10 &&
  echo "Backup-script gemaakt"
done

Voer het script uit met de opdracht:

dany@linux-cj0r:~> sh inotify-voorbeeld
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
/tmp/ CREATE test
backup-script uitvoeren
Backup-script gemaakt
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
/tmp/ DELETE test
backup-script uitvoeren
Backup-script gemaakt
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
^C

De uitvoer van het script werd veroorzaakt door het uitvoeren van de volgende twee opdrachten in een tweede terminal.

dany@linux-cj0r:~> touch /tmp/test
dany@linux-cj0r:~> rm /tmp/test