NAME

SysV::Init::Service - Class for SysV init service manipulation.

SYNOPSIS

use SysV::Init::Service;

my $obj = SysV::Init::Service->new(%parameters);
my @commands = $obj->commands;
my $name = $obj->name;
my $exit_code = $obj->start;
my $exit_code = $obj->status;
my $exit_code = $obj->stop;

METHODS

new

my $obj = SysV::Init::Service->new(%parameters);

Constructor.

  • service

    Service.

    Default value is undef.

    It is required.

  • service_dir

    Service directory.

    Default value is '/etc/init.d'.

commands

my @commands = $obj->commands;

Get service commands.

Be avare, command might not print any information to stdout in some configuration (rewrited /etc/lsb-base-logging.sh routines to blank code for quiet output).

Returns array of possible commands alphabetically sorted.

name

my $name = $obj->name;

Get service name.

Returns string with service name.

start

my $exit_code = $obj->start;

Run service start command.

Returns exit code.

status

my $exit_code = $obj->status;

Run service status command and return exit code.

Returns exit code.

stop

my $exit_code = $obj->stop;

Run service stop command.

Returns exit code.

ERRORS

new():
        Parameter 'service' is required.
        Service '%s' doesn't present.
        Service with .sh suffix doesn't possible.
        From Class::Utils::set_params():
                Unknown parameter '%s'.

start():
        Problem with service '%s' start.
                STDERR: %s
                Exit code: %s

status():
        Problem with service '%s' status.
                STDERR: %s
                Exit code: %s

stop():
        Problem with service '%s' stop.
                STDERR: %s
                Exit code: %s

THEORY

Exit codes of init.d script in status command.
see Debian Wheezy /lib/lsb/init-functions pidofproc() and status_of_proc()
routines.
Exit codes:
0 - Program is running (pidfile exist).
0 - Program is running, but not owned by this user (pidfile exist).
0 - Program is running (pidfile doesn't exist and is defined PID).
1 - Program is dead (pidfile exist).
3 - Program is not running (pidfile doesn't exist and is defined PID).
3 - Program probably stopped (pidfile doesn't exist and is defined PID).
3 - Almost certain program is not running (pidfile doesn't exist).
4 - PID file not readable, hence status is unknown.
4 - Unable to determine status (pidfile doesn't exist).

EXAMPLE

use strict;
use warnings;

use File::Spec::Functions qw(catfile);
use File::Temp qw(tempfile tempdir);
use IO::Barf qw(barf);
use SysV::Init::Service;

# Temporary directory.
my $temp_dir = tempdir('CLEANUP' => 1);

# Create fake service.
my $fake = <<'END';
#!/bin/sh
echo "[ ok ] Usage: /fake {start|stop|status}."
END

# Save to file.
my $fake_file = catfile($temp_dir, 'fake');
barf($fake_file, $fake);

# Chmod.
chmod 0755, $fake_file;

# Service object.
my $obj = SysV::Init::Service->new(
        'service' => 'fake',
        'service_dir' => $temp_dir,
);

# Get commands.
my @commands = $obj->commands;

# Print commands to output.
map { print $_."\n"; } @commands;

# Clean.
unlink $fake_file;

# Output:
# start
# stop
# status

DEPENDENCIES

Capture::Tiny, Class::Utils, English, Error::Pure, File::Spec::Functions.

SEE ALSO

service

run a System V init script

REPOSITORY

https://github.com/michal-josef-spacek/SysV-Init-Service

AUTHOR

Michal Josef Špaček mailto:skim@cpan.org

http://skim.cz

LICENSE AND COPYRIGHT

© 2013-2023 Michal Josef Špaček

BSD 2-Clause License

VERSION

0.07