1MooseX::Daemonize(3pm)User Contributed Perl DocumentationMooseX::Daemonize(3pm)
2
3
4

NAME

6       MooseX::Daemonize - Role for daemonizing your Moose based application
7

VERSION

9       version 0.22
10

SYNOPSIS

12           package My::Daemon;
13           use Moose;
14
15           with qw(MooseX::Daemonize);
16
17           # ... define your class ....
18
19           after start => sub {
20               my $self = shift;
21               return unless $self->is_daemon;
22               # your daemon code here ...
23           };
24
25           # then in your script ...
26
27           my $daemon = My::Daemon->new_with_options();
28
29           my ($command) = @{$daemon->extra_argv}
30           defined $command || die "No command specified";
31
32           $daemon->start   if $command eq 'start';
33           $daemon->status  if $command eq 'status';
34           $daemon->restart if $command eq 'restart';
35           $daemon->stop    if $command eq 'stop';
36
37           warn($daemon->status_message);
38           exit($daemon->exit_code);
39

DESCRIPTION

41       Often you want to write a persistent daemon that has a pid file, and
42       responds appropriately to Signals. This module provides a set of basic
43       roles as an infrastructure to do that.
44

WARNING

46       The maintainers of this module now recommend using Daemon::Control
47       instead.
48

CAVEATS

50       When going into background MooseX::Daemonize closes all open file
51       handles. This may interfere with you logging because it may also close
52       the log file handle you want to write to. To prevent this you can
53       either defer opening the log file until after start. Alternatively, use
54       can use the 'dont_close_all_files' option either from the command line
55       or in your .sh script.
56
57       Assuming you want to use Log::Log4perl for example you could expand the
58       MooseX::Daemonize example above like this.
59
60           after start => sub {
61               my $self = shift;
62               return unless $self->is_daemon;
63               Log::Log4perl->init(\$log4perl_config);
64               my $logger = Log::Log4perl->get_logger();
65               $logger->info("Daemon started");
66               # your daemon code here ...
67           };
68

ATTRIBUTES

70       This list includes attributes brought in from other roles as well we
71       include them here for ease of documentation. All of these attributes
72       are settable though MooseX::Getopt's command line handling, with the
73       exception of "is_daemon".
74
75       progname Path::Class::Dir | Str
76           The name of our daemon, defaults to "$package_name =~ s/::/_/";
77
78       pidbase Path::Class::Dir | Str
79           The base for our PID, defaults to "/var/run/"
80
81       basedir Path::Class::Dir | Str
82           The directory we chdir to; defaults to "/".
83
84       pidfile MooseX::Daemonize::Pid::File | Str
85           The file we store our PID in, defaults to "$pidbase/$progname.pid"
86
87       foreground Bool
88           If true, the process won't background. Useful for debugging. This
89           option can be set via Getopt's -f.
90
91       no_double_fork Bool
92           If true, the process will not perform the typical double-fork,
93           which is extra added protection from your process accidentally
94           acquiring a controlling terminal.  More information can be found by
95           Googling "double fork daemonize".
96
97       ignore_zombies Bool
98           If true, the process will not clean up zombie processes.  Normally
99           you don't want this.
100
101       dont_close_all_files Bool
102           If true, the objects open filehandles will not be closed when
103           daemonized.  Normally you don't want this.
104
105       is_daemon Bool
106           If true, the process is the backgrounded daemon process, if false
107           it is the parent process. This is useful for example in an "after
108           'start' =" sub { }> block.
109
110           NOTE: This option is explicitly not available through
111           MooseX::Getopt.
112
113       stop_timeout
114           Number of seconds to wait for the process to stop, before trying
115           harder to kill it. Defaults to 2 seconds.
116
117       These are the internal attributes, which are not available through
118       MooseX::Getopt.
119
120       exit_code Int
121       status_message Str
122

METHODS

124   Daemon Control Methods
125       These methods can be used to control the daemon behavior. Every effort
126       has been made to have these methods DWIM (Do What I Mean), so that you
127       can focus on just writing the code for your daemon.
128
129       Extending these methods is best done with the Moose method modifiers,
130       such as "before", "after" and "around".
131
132       start
133           Setup a pidfile, fork, then setup the signal handlers.
134
135       stop
136           Stop the process matching the pidfile, and unlinks the pidfile.
137
138       restart
139           Literally this is:
140
141               $self->stop();
142               $self->start();
143
144       status
145       shutdown
146
147   Pidfile Handling Methods
148       init_pidfile
149           This method will create a MooseX::Daemonize::Pid::File object and
150           tell it to store the PID in the file "$pidbase/$progname.pid".
151
152       check
153           This checks to see if the daemon process is currently running by
154           checking the pidfile.
155
156       get_pid
157           Returns the PID of the daemon process.
158
159       save_pid
160           Write the pidfile.
161
162       remove_pid
163           Removes the pidfile.
164
165   Signal Handling Methods
166       setup_signals
167           Setup the signal handlers, by default it only sets up handlers for
168           SIGINT and SIGHUP. If you wish to add more signals just use the
169           "after" method modifier and add them.
170
171       handle_sigint
172           Handle a INT signal, by default calls "$self-"stop()>
173
174       handle_sighup
175           Handle a HUP signal. By default calls "$self-"restart()>
176
177   Exit Code Methods
178       These are overridable constant methods used for setting the exit code.
179
180       OK  Returns 0.
181
182       ERROR
183           Returns 1.
184
185   Introspection
186       meta()
187           The meta() method from Class::MOP::Class
188

DEPENDENCIES

190       Moose, MooseX::Getopt, MooseX::Types::Path::Class and POSIX
191

INCOMPATIBILITIES

193       Obviously this will not work on Windows.
194

SEE ALSO

196       Daemon::Control, Proc::Daemon, Daemon::Generic
197

THANKS

199       Mike Boyko, Matt S. Trout, Stevan Little, Brandon Black, Ash Berlin and
200       the #moose denizens
201
202       Some bug fixes sponsored by Takkle Inc.
203

SUPPORT

205       Bugs may be submitted through the RT bug tracker
206       <https://rt.cpan.org/Public/Dist/Display.html?Name=MooseX-Daemonize>
207       (or bug-MooseX-Daemonize@rt.cpan.org <mailto:bug-MooseX-
208       Daemonize@rt.cpan.org>).
209
210       There is also a mailing list available for users of this distribution,
211       at <http://lists.perl.org/list/moose.html>.
212
213       There is also an irc channel available for users of this distribution,
214       at "#moose" on "irc.perl.org" <irc://irc.perl.org/#moose>.
215

AUTHORS

217       •   Stevan Little <stevan.little@iinteractive.com>
218
219       •   Chris Prather <chris@prather.org>
220

CONTRIBUTORS

222       •   Karen Etheridge <ether@cpan.org>
223
224       •   Michael Reddick <michael.reddick@gmail.com>
225
226       •   Yuval Kogman <nothingmuch@woobling.org>
227
228       •   Ash Berlin <ash@cpan.org>
229
230       •   Brandon L Black <blblack@gmail.com>
231
232       •   Jonathan Sailor <jsailor@cpan.org>
233
234       •   David Steinbrunner <dsteinbrunner@pobox.com>
235
236       •   Michael Schwern <mschwern@cpan.org>
237
238       •   Shoichi Kaji <skaji@cpan.org>
239
240       •   Dave Rolsky <autarch@urth.org>
241
242       •   Chisel Wright <chisel@chizography.net>
243
245       This software is copyright (c) 2007 by Chris Prather.
246
247       This is free software; you can redistribute it and/or modify it under
248       the same terms as the Perl 5 programming language system itself.
249
250
251
252perl v5.38.0                      2023-07-20            MooseX::Daemonize(3pm)
Impressum