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

