package Daemon;
use strict;
sub new {
shift;
my $self = bless {};
($self->{'path'}, $self->{'pidfile'}, $self->{'init_script'}) = @_;
return $self;
}
sub version {
my $self = shift;
my $version = `$self->{'path'} -v`;
if ($version =~ /version\s+([\d\.\-]+)/) {
return $1;
}
}
sub __pid {
my $self = shift;
open PID, $self->{'pidfile'} || return 0;
my $pid = <PID>;
close PID;
return $pid;
}
sub status {
my $self = shift;
my $pid = $self->__pid();
if ($pid && kill(0, $pid)) {
return 1;
} else {
unlink($self->{'pidfile'});
return 0;
}
}
sub start {
my $self = shift;
return (1, _('Daemon is already running')) if $self->status();
warn(`$self->{'init_script'} start`);
my $res;
if ($?) {
$res = 'Error starting: '.$?;
}
return ($self->status(), $res);
}
sub stop {
my $self = shift;
return (0, _('Daemon is not running')) unless $self->status();
warn(`$self->{'init_script'} stop`);
my $res;
if ($?) {
$res = 'Error stopping: '.$?;
}
return ($self->status(), $res);
}
sub hup {
my $self = shift;
return $self->status() if kill('HUP', $self->__pid());
}
1;