Daemon-Generic

 view release on metacpan or  search on metacpan

t/daemon.t  view on Meta::CPAN

#!/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 )