NAME
Ubic::Service - interface and base class for any ubic service
VERSION
version 1.37_01
SYNOPSIS
print "Service: ", $service->name;
$service->start;
$service->stop;
$service->restart;
$status = $service->status;
DESCRIPTION
Ubic::Service is the abstract base class for all ubic service classes.
It provides common API for implementing service start/stop operations, custom commands and tuning some metadata properties (user()
, group()
, check_period()
).
METHODS
ACTION METHODS
All action methods should return Ubic::Result::Class objects. If action method returns plain string, Ubic will wrap it into result object too.
- start()
-
Start service. Should throw exception on failure and string with operation result otherwise.
Starting already running service should do nothing and return
already running
. - stop()
-
Stop service. Should throw exception on failure and string with operation result otherwise.
Stopping already stopped service should do nothing and return
not running
.Successful stop of a service must disable this service.
- status()
-
Check real status of service.
It should check that service is running correctly and return
running
if it is so. - reload()
-
Reload service, if possible.
METADATA METHODS
All metadata methods are read-only. All of them provide sane defaults.
- port()
-
Get port number if service provides a server which uses TCP protocol.
Default is
undef
. - user()
-
Should return user from which the service can be controlled and will be running.
Defaults to
default_user
from Ubic::Settings (i.e.,root
for system-wide installations, or to the installation owner for local installations). - group()
-
Get list of groups from which the service can be controlled and will be running.
First group from list will be used as real and effective group id, and other groups will be set as supplementary groups.
Default is an empty list, which will later be interpreted as default group of the user returned by
user()
method. - check_period()
-
Period of checking a service by watchdog in seconds.
Default is 60 seconds and it is unused by ubic-watchdog currently, so don't bother to override it by now :)
- check_timeout()
-
Timeout after which watchdog will give up on checking a service and kill itself.
This parameter exists as a precaution against incorrectly implemented
status()
orstart()
methods. Ifstatus()
method hangs, without this timeout, watchdog would stay in memory forever and never get a chance to restart a service.This parameter is *not* a timeout for querying your service by HTTP or whatever your status check is. Service-specific timeouts should be configured by other means.
Default value is 60 seconds. It should not be changed unless you have a very good reason to do so (i.e., your service is so horribly slow that it can't start in 1 minute).
CUSTOM COMMAND METHODS
Services can define custom commands which don't fit into usual start/stop/restart/status
set.
- custom_commands()
-
Can return list of service's custom commands, if such are exist.
- do_custom_command($command)
-
Should execute specified command, if it is supported.
NAME METHODS
These methods usually should not be overriden by service classes. They are usually used by code which loads service (i.e. some Ubic::Multiservice) to associate service with its name.
- name()
- name($new_name)
-
Name of service.
Each service with the same parent should have an unique name.
In case of subservices, this method should return the most lower-level name.
Service implementation classes shouldn't override this or other
*_name
methods; it's usually a service's loader job to set them correctly. - full_name()
-
Fully qualified name of service.
Each service must have a unique full_name.
Full name is a concatenation of service's short
name
and service's <parent_name>. - parent_name()
- parent_name($new_parent_name)
-
Get/set name of service's parent.
Service's loader (i.e. some kind of Ubic::Multiservice) is responsible for calling this method immediately after service's construction as
$service->parent_name($self->full_name)
.
FUTURE DIRECTIONS
Current API for custom commands is inconvenient and don't support parameterized commands. It needs some refactoring.
Requiring every service to inherit from this class can be seen as undesirable by some programmers, especially by those who prefer to use Moose and roles. If you know how to make this API more role-friendly without too much of converting pains, please contact us at ubic-perl@googlegroups.com or at irc://irc.perl.org#ubic.
SEE ALSO
Ubic::Service::Skeleton - implement simple start/stop/status methods, and ubic will care about everything else.
Ubic::Service::Common - just like Skeleton, but all code can be passed to constructor as sub references.
Ubic::Service::SimpleDaemon - give it any binary and it will make service from it.
AUTHOR
Vyacheslav Matyukhin <mmcleric@yandex-team.ru>
COPYRIGHT AND LICENSE
This software is copyright (c) 2012 by Yandex LLC.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.