-#!/usr/bin/perl
+#!/usr/bin/perl -w
#
# This is the DX cluster 'daemon'. It sits in the middle of its little
# web of client routines sucking and blowing data where it may.
unshift @INC, "$root/perl"; # this IS the right way round!
unshift @INC, "$root/local";
+
+ # try to create and lock a lockfile (this isn't atomic but
+ # should do for now
+ $lockfn = "$root/perl/cluster.lock"; # lock file name
+ if (-e $lockfn) {
+ open(CLLOCK, "$lockfn") or die "Can't open Lockfile ($lockfn) $!";
+ my $pid = <CLLOCK>;
+ chomp $pid;
+ die "Lockfile ($lockfn) and process $pid exist, another cluster running?" if kill 0, $pid;
+ close CLLOCK;
+ }
+ open(CLLOCK, ">$lockfn") or die "Can't open Lockfile ($lockfn) $!";
+ print CLLOCK "$$\n";
+ close CLLOCK;
}
use Msg;
use Geomag;
use CmdAlias;
use Local;
+use Fcntl ':flock';
use Carp;
@inqueue = (); # the main input queue, an array of hashes
$systime = 0; # the time now (in seconds)
-$version = "1.22"; # the version no of the software
+$version = "1.24"; # the version no of the software
$starttime = 0; # the starting time of the cluster
-
+$lockfn = "cluster.lock"; # lock file name
+
# handle disconnections
sub disconnect
{
foreach $dxchan (DXChannel->get_all()) {
disconnect($dxchan) unless $dxchan == $DXProt::me;
}
+ Msg->event_loop(1, 0.05);
+ Msg->event_loop(1, 0.05);
+ Msg->event_loop(1, 0.05);
+ Msg->event_loop(1, 0.05);
Log('cluster', "DXSpider V$version stopped");
+ unlink $lockfn;
exit(0);
}
};
dbg('local', "Local::init error $@") if $@;
-
-
# print various flags
#print "useful info - \$^D: $^D \$^W: $^W \$^S: $^S \$^P: $^P\n";