Jens Puruckherr jpuruckherr@cyberport.de (Mo 14 Jan 2008 10:02:20 CET):
Das soll sich nun ändern. Ich will unmittelbar nach einem erfolgreichen SCP das lokale File löschen. Ich muss jedoch erst mal prüfen, ob das lokale File nicht gerade noch von der Applikation geschrieben wird, bevor ich es ihr unterm Ar... wegkopiere und lösche. Das soll mit einem kleinem Shellscript passieren, welches in Intervallen vom Cron aufgerufen wird. Mein Ansatz sieht so aus (pseudocode)
cd workdir; for file in * Schreiblock setzen if Lock ok: kopieren if kopieren ok: löschen Lock entfernen
Ich weiss jetzt aber nicht:
- Wie und ob überhaupt lockt Perl ein File, welches gerade erzeugt
wird? D-H. kann mein Lock überhaupt
Ein open() in Perl macht auch nur fein fopen(3), und das lockt erstmal gar nix.
Das was Marcus schrieb, ist ok (tempfile und dann rename(2). Wichtig ist, daß es rename(2) ist, denn das ist atomar, ein mv(1) nicht zwingend).
rename(3pl) ist m.W. genau das rename(2).
- Wie verwende ich flock() in einem Script, wenn ich mehr als ein
Commdo dazu ausführen will?
use Fatal qw(open flock); use Fcntl qw(:flock); open(my $fh, $filename); flock($fh, LOCK_EX); .... flock($fh, LOCK_UN); # (oder $fh einfach wegschmeissen)
perldoc -f flock