SysV-Init-Service
view release on metacpan or search on metacpan
package SysV::Init::Service;
use strict;
use warnings;
use Capture::Tiny qw(capture);
use Class::Utils qw(set_params);
use English qw(-no_match_vars);
use Error::Pure qw(err);
use File::Spec::Functions qw(catfile);
our $VERSION = 0.07;
# Construct.
sub new {
my ($class, @params) = @_;
# Create object.
my $self = bless {}, $class;
# Service.
$self->{'service'} = undef;
# Service directory.
$self->{'service_dir'} = '/etc/init.d';
# Process parameters.
set_params($self, @params);
# Check for service.
if (! defined $self->{'service'}) {
err "Parameter 'service' is required.";
}
if ($self->{'service'} =~ m/\.sh$/ms) {
err "Service with .sh suffix doesn't possible.";
}
$self->{'_service_path'} = catfile($self->{'service_dir'},
$self->{'service'});
if (! -x $self->{'_service_path'}) {
err "Service '$self->{'service'}' doesn't present.";
}
# Object.
return $self;
}
# Get service commands.
sub commands {
my $self = shift;
my ($stdout, $stderr, $exit_code) = capture {
system $self->{'_service_path'};
};
if ($stderr) {
$stdout .= $stderr;
}
my @commands;
if ($stdout =~ m/{([\w\|\-]+)}/ms) {
@commands = split m/\|/ms, $1;
} elsif ($stdout =~ m/([\w\-]+)\s*$/ms) {
@commands = $1;
}
return sort @commands;
}
# Get service name.
sub name {
my $self = shift;
return $self->{'service'};
}
# Start service.
sub start {
my $self = shift;
return $self->_service_command('start');
}
# Get status.
sub status {
my $self = shift;
return $self->_service_command('status');
}
# Stop service.
sub stop {
my $self = shift;
return $self->_service_command('stop');
}
# Common command.
sub _service_command {
my ($self, $command) = @_;
my ($stdout, $stderr, $exit_code) = capture {
system $self->{'_service_path'}.' '.$command;
};
my $ret_code = $exit_code >> 8;
if ($stderr) {
chomp $stderr;
err "Problem with service '$self->{'service'}' $command.",
'STDERR', $stderr,
'Exit code', $ret_code;
}
return $ret_code;
}
1;
__END__
=pod
=encoding utf8
=head1 NAME
SysV::Init::Service - Class for SysV init service manipulation.
=head1 SYNOPSIS
( run in 0.519 second using v1.01-cache-2.11-cpan-71847e10f99 )