Jörk Behrends: Directory lesen mit Perl

Beitrag lesen

Hi Cheatah!

Um Überschneidungen zu vermeiden sollte das Script "öffentlich mitteilen", daß es gerade eine neue Datei erstellt, andere Instanzen sollten bei dieser Mitteilung einfach warten. Ich mache das immer, indem ich eine Dummy-Datei erstelle, die ich vorher auf Existenz prüfe. Ist sie da, warte ich mit sleep eine Sekunde. Ist sie auch nach 5 Sekunden noch da, war's offenbar eine Fehlmitteilung und ich schreibe die Datei trotzdem.

Das mit der Dummy-Datei kann aber auch schon mal in die Hose gehen. Angenommen zwei Prozesse
machen sich gleichzeitig daran diese Datei zu erzeugen. Beide werde sie nicht "sehen" und gehen
dann davon aus, daß sie jetzt zuschlagen können. Also wird diese Datei zweimal angelegt, was
ja nicht unbedingt in die Hose gehen muß. Jedoch gehen jetzt bei Prozesse davon aus, daß sie
ganz nach Gusto im Verzeichnis Dateien anlegen dürfen ....

Meine Idee hierzu wäre, zuerst eine Datei mit der Prozess-ID anzulegen. Diese sollte eigentlich
eindeutig sein, solange man nicht mit Sub-Prozessen rumspielt. Anschließend versucht man dann, die Datei in die eigentliche Zieldatei umzubenennen - was nur gehen sollte, wenn diese
noch nicht existiert. Bei dieser Variante kann ich natürlich auch gleich die Log-Datei 0042.log
erzeugen. Bei einem Fehler probiere ich die nächste Nummer. Um nicht unbedingt von vorne
anfangen zu müssen, kann ich noch vorher in die directory schauen, und den höchsten Wert
als Startwert nutzen.

ciao,
   Jörk