2012-04-29T16:54:57
KuerbisDann liege ich mit meinem Beispiel nicht ganz daneben.
An das Datei locken habe ich nicht gedacht - das würde es wieder ein bisschen komplizierter machen.
flock() ist keine Hexerei. Wenn Du darauf verzichten möchtest, flock() in bisherige Scripts einzubauen, Idee:
Das Modul sieht so aus:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package Lock;
use strict;
use warnings;
use Fcntl qw(:flock);
use IO::File;
my $self = {
file => '/home/lockfile',
FH => undef,
};
sub import{
my $class = shift;
$self->{FH} = IO::File->new or die "Can't get a FileHandle";
$self->{FH}->open($self->{file}, O_CREAT|O_RDWR) or die "IO-Error: $!";
flock($self->{FH}, LOCK_EX) or warn 'Your system does not support flock()';
}
1;
Und selbstverständlich kann das Lockfile auch (namentlich) importiert werden. Ich nutze das kleine Modul so wie es oben steht, jedes Script, was das Modul einbindet, wird somit atomar, selbst wenn darin mehrere Dateien beschrieben werden oder in eine DB geschrieben werden soll.