Daemon-Generic
view release on metacpan or search on metacpan
#!/usr/bin/perl -w
use strict;
use warnings;
use Test::More qw(no_plan);
use File::Temp qw(tempdir);
use File::Slurp;
use FindBin;
use Time::HiRes;
use Eval::LineNumbers qw(eval_line_numbers);
my $finished;
END { ok($finished, "finished"); }
my $tmp = tempdir();
# $tmp = "/tmp/foo";
my $base = "$^X $tmp/daemon.pl -c $tmp/config";
write_file("$tmp/logger", <<END_LOGGER);
#!$^X
open \$out, ">>", \$ENV{LOGGER_OUTPUT}
or die "open >\$ENV{LOGGER_OUTPUT}: \$!";
select(\$out);
\$| = 1;
print \$out "START LOG \@ARGV\n";
while (<STDIN>) {
print \$out \$_;
}
END_LOGGER
chmod(0755, "$tmp/logger") or die;
$ENV{LOGGER_OUTPUT} = "$tmp/log";
$ENV{PATH} = "$tmp:$ENV{PATH}";
# diag read_file("$tmp/config");
my $daemon_header = eval_line_numbers(<<'END_HEADER'); #{
use strict;
use warnings;
use FindBin;
use File::Slurp;
use Time::HiRes qw(sleep);
END_HEADER
#}
my $daemon_body = eval_line_numbers(<<'END_BODY'); #{
my $pid_file;
my $counter_file;
my $counter = 0;
alarm(240); # just in case
newdaemon();
my %c;
sub gd_postconfig
{
my ($self, %config) = @_;
%c = %config;
}
sub gd_run_body {
if ($c{DIE}) {
die $c{DIE};
}
write_file($c{COUNTER}, "$counter\n");
$counter++;
sleep($sleeptime) if $sleeptime;
}
my $rc = 0;
sub gd_preconfig {
my ($self) = @_;
my %config;
open my $fd, "<", $self->{configfile} or die "open $self->{configfile}: $!";
while (<$fd>) {
chomp;
next if /^$/;
next if /^#/;
next unless /^(.+?)=(.*)/;
$config{$1} = $2;
}
$self->{gd_foreground} = $config{foreground};
$rc++;
( run in 2.014 seconds using v1.01-cache-2.11-cpan-cdf2f3d4e48 )