NAME

Ubic::Daemon - toolkit for creating daemonized process

VERSION

version 1.32_01

SYNOPSIS

use Ubic::Daemon qw(start_daemon stop_daemon check_daemon);

start_daemon({bin => '/bin/sleep', pidfile => "/var/lib/something/pid"});
stop_daemon("/var/lib/something/pid");

$daemon_status = check_daemon("/var/lib/something/pid");

DESCRIPTION

This module can safely start and daemonize any binary or any perl coderef.

Main source of knowledge if daemon is still running is pidfile, which is locked all the time after daemon was created.

Pidfile format is unreliable and can change in future releases (it's actually even not a file, it's a dir with several files inside it), so if you need to get daemon's pid, use check_daemon() result.

stop_daemon($pidfile)
stop_daemon($pidfile, $options)

Stop daemon which was started with $pidfile.

It sends SIGTERM to process with pid specified in $pidfile until it will stop to exist (according to check_daemon() method).

If it fails to stop process after several seconds, exception will be raised (this should never happen, assuming you have enough grants).

Options:

timeout

Number of seconds to wait before raising exception that daemon can't be stopped.

Return value: not running if daemon is already not running; stopped if daemon is stopped by SIGTERM.

start_daemon($params)

Start daemon.

Throws exception if anything fails.

Successful completion doesn't mean much, though, since daemon can fail any moment later, and we have no idea when its initialization stage finishes.

Parameters:

bin

Binary which will be daemonized.

Can be string or arrayref with arguments. Arrayref-style values are recommended in complex cases, because otherwise exec() can invoke sh shell which will immediately exit on sigterm.

function

Function which will be daemonized. One and only one of function and bin must be specified.

Function daemonization is a dangerous feature and will probably be deprecated and removed in future.

name

Name of guardian process. Guardian will be named "ubic-guardian $name".

If not specified, bin's value will be used, or anonymous when daemonizing perl code.

pidfile

Pidfile is a dir in local filesystem which will be used as a storage of daemon's info.

It will be created if necessary, assuming that its parent dir exists.

stdout

Write all daemon's output to given file. If not specified, all output will be redirected to /dev/null.

stderr

Write all daemon's error output to given file. If not specified, all stderr will be redirected to /dev/null.

ubic_log

Optional filename of ubic log. It will contain some technical information about running daemon.

If not specified, this logging facility will be disabled.

term_timeout

Can contain integer number of seconds to wait between sending SIGTERM and SIGKILL to daemon.

Zero value means that guardian will send sigkill to daemon immediately.

Default is 10 seconds.

check_daemon($pidfile)

Check whether daemon is running.

Returns instance of Ubic::Daemon::Status class if daemon is alive, and false otherwise.

BUGS AND CAVEATS

Probably. But it definitely is ready for production usage.

This module currently is Linux-specific, because it uses /proc some magic. Patches are very welcome to fix this.

If you can't figure out why there are ubic-guardian processes in your ps output, see Ubic::Manual::FAQ, answer is there.

SEE ALSO

Ubic::Service::SimpleDaemon - simplest ubic service which uses Ubic::Daemon

There are also a plenty of other daemonizers on CPAN:

MooseX::Daemonize, Proc::Daemon, Daemon::Generic, Net::ServeR::Daemonize.

AUTHOR

Vyacheslav Matyukhin <mmcleric@yandex-team.ru>

COPYRIGHT AND LICENSE

This software is copyright (c) 2011 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.