summaryrefslogtreecommitdiff
path: root/lib/PerlDaemon/PerlDaemon.pl
diff options
context:
space:
mode:
Diffstat (limited to 'lib/PerlDaemon/PerlDaemon.pl')
-rw-r--r--lib/PerlDaemon/PerlDaemon.pl246
1 files changed, 123 insertions, 123 deletions
diff --git a/lib/PerlDaemon/PerlDaemon.pl b/lib/PerlDaemon/PerlDaemon.pl
index 1c3d331..ac7e4d2 100644
--- a/lib/PerlDaemon/PerlDaemon.pl
+++ b/lib/PerlDaemon/PerlDaemon.pl
@@ -15,187 +15,187 @@ use PerlDaemon::RunModules;
$| = 1;
sub trimstr (@) {
- my @str =
- @_;
+ my @str =
+ @_;
- for (@str) {
- chomp;
- s/^[\t\s]+//;
- s/[\t\s]+$//;
- }
+ for (@str) {
+ chomp;
+ s/^[\t\s]+//;
+ s/[\t\s]+$//;
+ }
- return @str;
+ return @str;
}
sub trunc ($) {
- my $file = shift;
- open my $fh, ">$file" or die "Can't write $file: $!\n";
- print $fh '';
- close $fh;
+ my $file = shift;
+ open my $fh, ">$file" or die "Can't write $file: $!\n";
+ print $fh '';
+ close $fh;
}
sub checkpid ($) {
- my $conf = shift;
- my $pidfile = $conf->{'daemon.pidfile'};
- my $logger = $conf->{logger};
+ my $conf = shift;
+ my $pidfile = $conf->{'daemon.pidfile'};
+ my $logger = $conf->{logger};
- trunc $pidfile unless -f $pidfile;
+ trunc $pidfile unless -f $pidfile;
- open my $fh, $pidfile or $logger->err("Can't read pidfile $pidfile: $!");
- my ($pid) = <$fh>;
- close $fh;
+ open my $fh, $pidfile or $logger->err("Can't read pidfile $pidfile: $!");
+ my ($pid) = <$fh>;
+ close $fh;
- if (defined $pid) {
- chomp $pid;
- $logger->err("Process with pid $pid already running") if 0 < int $pid && kill 0, $pid;
- }
+ if (defined $pid) {
+ chomp $pid;
+ $logger->err("Process with pid $pid already running") if 0 < int $pid && kill 0, $pid;
+ }
}
sub writepid ($) {
- my $conf = shift;
- my $logger = $conf->{logger};
+ my $conf = shift;
+ my $logger = $conf->{logger};
- my $pidfile = $conf->{'daemon.pidfile'};
+ my $pidfile = $conf->{'daemon.pidfile'};
- open my $fh, ">$pidfile" or $logger->err("Can't write pidfile: $!");
- print $fh "$$\n";
- close $fh;
+ open my $fh, ">$pidfile" or $logger->err("Can't write pidfile: $!");
+ print $fh "$$\n";
+ close $fh;
}
sub readconf ($%) {
- my ($confile, %opts) = @_;
- my $desc;
+ my ($confile, %opts) = @_;
+ my $desc;
- open my $fh, $confile or
- die "Can't read config file $confile (specify using config=filepath)\n";
+ open my $fh, $confile or
+ die "Can't read config file $confile (specify using config=filepath)\n";
- my %conf;
- while (<$fh>) {
- if (/^#(.*)/) {
- $desc = $1;
- next;
- }
+ my %conf;
+ while (<$fh>) {
+ if (/^#(.*)/) {
+ $desc = $1;
+ next;
+ }
- next if /^[\t\w]+#/;
- s/#.*//;
+ next if /^[\t\w]+#/;
+ s/#.*//;
- my ($key, $val) = trimstr split '=', $_, 2;
- next unless defined $val;
+ my ($key, $val) = trimstr split '=', $_, 2;
+ next unless defined $val;
- $conf{$key} = $val;
+ $conf{$key} = $val;
- if (defined $desc) {
- $conf{"$key.desc"} = $desc;
- $desc = undef;
- }
- }
+ if (defined $desc) {
+ $conf{"$key.desc"} = $desc;
+ $desc = undef;
+ }
+ }
- close $fh;
+ close $fh;
- # Check
- my $msg = 'Missing property:';
+ # Check
+ my $msg = 'Missing property:';
- foreach (qw(wd loopinterval alivefile pidfile logfile daemonize)) {
- my $key = "daemon.$_";
- die "$msg $key\n" unless exists $conf{$key};
- }
+ foreach (qw(wd loopinterval alivefile pidfile logfile daemonize)) {
+ my $key = "daemon.$_";
+ die "$msg $key\n" unless exists $conf{$key};
+ }
- @conf{keys %opts} = values %opts;
- return \%conf;
+ @conf{keys %opts} = values %opts;
+ return \%conf;
}
sub daemonize ($) {
- my $conf = shift;
- my $logger = $conf->{logger};
- $logger->logmsg('Daemonizing...');
+ my $conf = shift;
+ my $logger = $conf->{logger};
+ $logger->logmsg('Daemonizing...');
- chdir $conf->{'daemon.wd'} or $logger->err("Can't chdir to wd: $!");
+ chdir $conf->{'daemon.wd'} or $logger->err("Can't chdir to wd: $!");
- my $msg = 'Can\'t read /dev/null:';
+ my $msg = 'Can\'t read /dev/null:';
- open STDIN, '>/dev/null' or $logger->err("$msg $!");
- open STDOUT, '>/dev/null' or $logger->err("$msg $!");
- open STDERR, '>/dev/null' or $logger->err("$msg $!");
+ open STDIN, '>/dev/null' or $logger->err("$msg $!");
+ open STDOUT, '>/dev/null' or $logger->err("$msg $!");
+ open STDERR, '>/dev/null' or $logger->err("$msg $!");
- defined (my $pid = fork) or $logger->err("Can't fork: $!");
- exit if $pid;
-
- setsid or $logger->err("Can't start a new session: $!");
+ defined (my $pid = fork) or $logger->err("Can't fork: $!");
+ exit if $pid;
- writepid $conf;
- $logger->logmsg('Daemonizing completed');
+ setsid or $logger->err("Can't start a new session: $!");
+
+ writepid $conf;
+ $logger->logmsg('Daemonizing completed');
}
sub sighandlers ($) {
- my $conf = shift;
- my $logger = $conf->{logger};
-
- $SIG{TERM} = sub {
- # On shutdown
- $logger->logmsg('Received SIGTERM. Shutting down....');
- unlink $conf->{'daemon.pidfile'} if -f $conf->{'daemon.pidfile'};
- exit 0;
- };
-
- $SIG{HUP} = sub {
- # On logrotate
- $logger->logmsg('Received SIGHUP.');
- $logger->rotatelog();
- };
+ my $conf = shift;
+ my $logger = $conf->{logger};
+
+ $SIG{TERM} = sub {
+ # On shutdown
+ $logger->logmsg('Received SIGTERM. Shutting down....');
+ unlink $conf->{'daemon.pidfile'} if -f $conf->{'daemon.pidfile'};
+ exit 0;
+ };
+
+ $SIG{HUP} = sub {
+ # On logrotate
+ $logger->logmsg('Received SIGHUP.');
+ $logger->rotatelog();
+ };
}
sub prestartup ($) {
- my $conf = shift;
- checkpid $conf;
+ my $conf = shift;
+ checkpid $conf;
}
sub alive ($) {
- my $conf = shift;
+ my $conf = shift;
}
sub daemonloop ($) {
- my $conf = shift;
- my $rmodule = PerlDaemon::RunModules->new($conf);
- my $loopinterval = $conf->{'daemon.loopinterval'};
+ my $conf = shift;
+ my $rmodule = PerlDaemon::RunModules->new($conf);
+ my $loopinterval = $conf->{'daemon.loopinterval'};
- my $loop = shift;
- my $lastrun = [0,0];
+ my $loop = shift;
+ my $lastrun = [0,0];
- for (;;) {
- my $now = [gettimeofday];
- my $timediff = tv_interval($lastrun, $now);
+ for (;;) {
+ my $now = [gettimeofday];
+ my $timediff = tv_interval($lastrun, $now);
- if ($timediff >= $loopinterval) {
- $lastrun = $now;
- $rmodule->do();
- alive $conf;
- }
+ if ($timediff >= $loopinterval) {
+ $lastrun = $now;
+ $rmodule->do();
+ alive $conf;
+ }
- sleep $loopinterval / 10;
- }
+ sleep $loopinterval / 10;
+ }
}
sub showkeys ($) {
- my $conf = shift;
- for my $key (grep !/(^keys$)|(^config$)|(\.desc$)/, keys %$conf) {
- print '#' . (exists $conf->{"$key.desc"}
- ? $conf->{"$key.desc"}
- : ' Undocumented property');
- print "\n$key=$conf->{$key}\n\n";
- }
+ my $conf = shift;
+ for my $key (grep !/(^keys$)|(^config$)|(\.desc$)/, keys %$conf) {
+ print '#' . (exists $conf->{"$key.desc"}
+ ? $conf->{"$key.desc"}
+ : ' Undocumented property');
+ print "\n$key=$conf->{$key}\n\n";
+ }
}
sub getopts (@) {
- my %opts;
+ my %opts;
- for my $opt (@_) {
- next unless $opt =~ /=/;
- my ($key, $val) = split '=', $opt, 2;
- $opts{$key} = $val;
- }
+ for my $opt (@_) {
+ next unless $opt =~ /=/;
+ my ($key, $val) = split '=', $opt, 2;
+ $opts{$key} = $val;
+ }
- return %opts;
+ return %opts;
}
my %opts = getopts @ARGV;
@@ -203,8 +203,8 @@ my %opts = getopts @ARGV;
my $conf = readconf $opts{config}, %opts;
if (exists $conf->{keys}) {
- showkeys($conf);
- exit 0;
+ showkeys($conf);
+ exit 0;
}
$conf->{logger} = PerlDaemon::Logger->new($conf);
@@ -212,9 +212,9 @@ $conf->{logger} = PerlDaemon::Logger->new($conf);
prestartup $conf;
if ($conf->{'daemon.daemonize'} ne 'yes') {
- print "Running in foreground...\n";
+ print "Running in foreground...\n";
} else {
- daemonize $conf;
+ daemonize $conf;
}
sighandlers $conf;