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 = ; 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;