Medien & Phantastik > Linux/Unix

Magische Verzeichnisse mit inotify

(1/2) > >>

Bitpicker:
Ich habe am Wochenende etwas ausprobiert, das sehr nützlich sein kann.

Zunächst das Problem: ich habe für die Schule, an der meine Frau Lehrerin ist, eine Webseite gemacht. Anscheinend ist niemand im Kollegium willens, auch nur die Grundlagen der Pflege dieser Seite zu erlernen, so dass meine Frau von allen Seiten Fotos und Texte zum Einpflegen bekommt. Dabei ist sie auch völlig unbeleckt in Sachen Bildbearbeitung und Webdesign. Also bleiben z.B. Bearbeitungen von Bildern an mir hängen.

Ein typisches Beispiel ist die Batch-Anpassung der Bildgröße an das, was das Webseitentemplate erwartet. Dafür gibt es Tools, aber ich habe eine ganz einfache Lösung implementiert, die nicht einmal den Umgang mit so etwas benötigt.

Der Schlüssel zur Lösung liegt in einem Kerneldienst namens inotify. Dieser Dienst hat die Aufgabe, Änderungen am Dateisystem zu verkünden; mittels des Paketes inotify-tools erhält man einen Befehl inotifywait, der es möglich macht, innerhalb von Skripten auf solche Benachrichtigungen zu reagieren.

Folgendes Skript habe ich nun geschrieben und lasse es automatisch beim Start des Systems laufen:

#!/bin/bash

inotifywait -mq --format "%w%f" -e create /home/robin/webseitenbilder | while read file; do
   convert -resize 400x400 $file  $file
done

Dieses Skript schläft, bis inotify ihm mitteilt, dass in dem Verzeichnis /home/robin/webseitenbilder ein Ereignis der Art create stattgefunden hat, also eine Datei dort erstellt oder hin kopiert wurde. Wenn das geschieht, liefert inotifywait den Namen der Datei an den convert-Befehl aus dem imagemagick-Paket, der die Datei dann proportional korrekt in ein Quadrat der Größe 400x400 Pixel einpasst und somit verkleinert.

Das Ergebnis ist ein Verzeichnis, in das man Bilddateien nur hineinkopieren muss, und schon werden sie im Hintergrund auf die richtige Größe gebracht.

Natürlich kann man mit diesem Mechanismus noch eine Menge andere Sachen machen, z.B. kann man wichtige Dokumentenverzeichnisse auf Dateioperationen überwachen und bei jeder Änderung eine Echtzeit-Sicherung per copy-Befehl auf eine externe Platte durchführen. Oder man kann das gesamte Dateisystem überwachen und Veränderungen einer Installation mitprotokollieren.

Robin
   

Markus:
Cool, Danke.

Cenrim:
(hehe, das is jetzt wohl mein neuer rekord im nicht-hier-gewesen-sein)

ich wuerd mit dem "create" vorsichtig sein, evtl ist "write close"  sinnvoller.
wenn naemlich der event die verarbeitung eines noch nicht vollstaendig geschriebenen bildes verursacht kommt murks raus, ne?
gibt allerdings gemeine details, der vi(m) schreibt zb erstman nach .${FILE}.swp und  kopiert das beim speichern der datei dann nach ${FILE}, was den event "moved to" (oder so) ausloest - auf jeden fall _kein_ "write close"!

Bitpicker:
Soweit ich weiß, ist 'create' in Ordnung. Es hat jedenfalls noch keine Probleme verursacht. Allerdings sollte man 'moved-to' noch dazu setzen, denn sonst werden in das Verzeichnis verschobene Bilder tatsächlich nicht bearbeitet.

Bei 'write-close' befürchte ich, dass man eine Endlosschleife generiert, denn schließlich verändert man die Größe des Bildes in dem Verzeichnis, was wieder ein write-close Ereignis sein dürfte.

Robin

Zero:
coole sache ;) *notiert*

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln