Any::Daemon - basic needs for a daemon
Any::Daemon is extended by
Any::Daemon::HTTP
use Any::Daemon;
use Log::Report;
# Prepare a daemon for the Operating System
my $daemon = Any::Daemon->new(@os_opts);
# Start logging to syslog (see Log::Report::Dispatcher)
dispatcher SYSLOG => 'syslog';
# Run managing daemon
$daemon->run(@run_opts);
This module delivers the basic needs for any daemon on UNIX systems. There are
other standard daemon implementations available on CPAN, with as main common
difference that this module is not dedicated to a specific task. By using
Log::Report, you can easily redirect error reports to any logging mechanism
you like.
The code for this module is in use for many different daemons,
some with heavy load (a few dozen requests per second) Have a look in the
examples directory! Also, you may like Any::Daemon::HTTP
- Any::Daemon->new(%options)
- With "new()" you provide the operating
system integration %options, where
"run()" gets the activity related
parameters: the real action.
Be warned that the user, group, and workdir will not
immediately be effected: delayed until run().
-Option --Default
group undef
pid_file undef
user undef
workdir current working directory
- group => GID|GROUPNAME
- Change to this group (when started as root)
- pid_file => FILENAME
- user => UID|USERNAME
- Change to this user (when started as root) If you want to run your daemon
as root, then explicitly specify that with this option, to avoid a
warning.
- workdir => DIRECTORY
- Change DIRECTORY so temporary files and such are not written in the random
directory where the daemon got started.
If the directory does not exist yet, it will be created with
mode 0700 when the daemon object is initialized. We only move to that
directory when the daemon is run. The working directory does not get
cleaned when the daemon stops.
- $obj->pidFilename()
- $obj->workdir()
- [0.90] assigned working directory of the daemon in the file-system.
- $obj->run(%options)
- The "run" method gets the activity
related parameters.
You specify either
"run_task", for the function to be
called by this deamon itself, or
"child_task" when you wish to manage
child tasks which run the action.
[0.96] When you pass a method name, it will be called on this
object. This is very clean when you have extended this daemon class.
-Option --Default
background <true>
child_died 'childDied'
child_task undef
kill_childs 'killChilds'
max_childs 10
reconfigure 'reconfigDaemon'
run_task undef
- background => BOOLEAN
- Run the managing daemon in the background. During testing, it is prefered
to run the daemon in the foreground, to be able to stop the daemon with
Crtl-C and to see errors directly on the screen in stead of only in some
syslog file.
- child_died => CODE|METHOD
- The "child_died" routine handles dieing
kids and the restart of new ones. It gets two parameters: the maximum
number of childs plus the task to perform per kid.
- child_task => CODE|METHOD
- The CODE will be run for each child which is started, also when they are
started later on. If the task is not specified, only a warning is
produced. This may be useful when you start implementing the daemon: you
do not need to care about the task to perform yet.
The returned value of thise CODE is used as exit code of the
child process, where zero means 'ok'.
- kill_childs => CODE|METHOD
- The CODE terminates all running children, maybe to start new ones, maybe
to terminate the whole daemon.
- max_childs => INTEGER
- The maximum (is usual) number of childs to run.
- reconfigure => CODE|METHOD
- The CODE is run when a SIGHUP is received; signal 1 is used by most
daemons as trigger for reconfiguration.
- run_task => CODE|METHOD
- [0.96] The CODE which will be run by this process. This implies: no
managed children.
This module is part of Any-Daemon distribution version 0.96, built on October
08, 2018. Website: http://perl.overmeer.net/CPAN/
Copyrights 2011-2018 by [Mark Overmeer]. For other contributors see ChangeLog.
This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself. See
http://dev.perl.org/licenses/