dasa+2008-08-20 10:33:44--Wie wärs wenn du mit Zeitstempel arbeitest, die Lösung in Pseudocode:
Script eins:
Holt Zeitstempel von xyz.txt
Wenn /tmp/<script1bezeichner><zeitstempelderdatei>.txt nicht vorhanden
Script eins kopiert xyz.txt nach /tmp/xyz<zeitstempelderdatei>.txt
führt txt aus
löscht alle alten /tmp/<script1bezeichner><altezeitstempel>.txt
Script zwei ähnlich, nur halt mit einem anderen Bezeichner.
Hm, das scheint mir nicht so ganz ausgereift zu sein, aber so aehnlich wuerde ich es auch machen:
1. Verschiebe Datei nach xyz.txt.tmp.$random
2. Fuehre die Datei aus
3. Loesche die Datei (also xyz.txt.tmp.$random)
Wenn man dagegen abgesichert sein will, dass das Script abstuerzt, und die Datei zwar schon umbenannt ist aber nicht bearbeitet, kann man vielleicht als 0. Schritt einführen:
0. Dateien *.tmp.*, welche eine atime von mehr als ein paar Minuten (je nach dem, wie lange das Script typischerweise läuft) haben, werden wieder so umbenannt, dass das .tmp.* nicht mehr am Ende ist.
Alles steht und fällt mit dem Atomarsein von rename(): Es darf nichts anderes passieren zwischen dem Prüfen auf Existenz der Datei und Umbenennen der Datei.
Bei Linux ist rename() afaik hinreichend atomar dafür. Ob das in WebDAV ausgenutzt werden kann, weiß ich nicht.
($random kann natürlich sinnvollerweise aus Zeitstempel und PID und Rechnername bestehen.)