Autor Thema: Magische Verzeichnisse mit inotify  (Gelesen 2392 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline Bitpicker

  • /dev/gamemaster
  • Famous Hero
  • ******
  • Beiträge: 3.506
  • Geschlecht: Männlich
  • Username: bitpicker
    • Nyboria - the dark side of role-playing
Magische Verzeichnisse mit inotify
« am: 29.03.2010 | 08:14 »
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
   
Wie heißt das Zauberwort? -- sudo

(Avatar von brunocb, http://tux.crystalxp.net/)

Offline Markus

  • Hero
  • *****
  • Beiträge: 1.513
  • Username: Markus
Re: Magische Verzeichnisse mit inotify
« Antwort #1 am: 29.03.2010 | 09:04 »
Cool, Danke.

Offline Cenrim

  • Adventurer
  • ****
  • pkg list -a games/pnp/*
  • Beiträge: 761
  • Geschlecht: Männlich
  • Username: Cenrim
Re: Magische Verzeichnisse mit inotify
« Antwort #2 am: 30.03.2010 | 13:59 »
(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"!

lala la la lah, lala la la lah...

Offline Bitpicker

  • /dev/gamemaster
  • Famous Hero
  • ******
  • Beiträge: 3.506
  • Geschlecht: Männlich
  • Username: bitpicker
    • Nyboria - the dark side of role-playing
Re: Magische Verzeichnisse mit inotify
« Antwort #3 am: 1.04.2010 | 06:30 »
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
Wie heißt das Zauberwort? -- sudo

(Avatar von brunocb, http://tux.crystalxp.net/)

Offline Zero

  • Gänseblümchen
  • Famous Hero
  • ******
  • Rating: Awesome
  • Beiträge: 2.387
  • Geschlecht: Männlich
  • Username: Khaoskind
Re: Magische Verzeichnisse mit inotify
« Antwort #4 am: 1.04.2010 | 07:53 »
coole sache ;) *notiert*
101010

Offline Cenrim

  • Adventurer
  • ****
  • pkg list -a games/pnp/*
  • Beiträge: 761
  • Geschlecht: Männlich
  • Username: Cenrim
Re: Magische Verzeichnisse mit inotify
« Antwort #5 am: 1.04.2010 | 15:09 »
[...]
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
ups, daran hatte ich gar nicht gedacht, ich hatte angefangen in anderer richtung viel komplizierter weiterzudenken ;)
lala la la lah, lala la la lah...