use Moose::Role;
use MooseX::Types::Path::Class;
-our $VERSION = "0.10";
+our $VERSION = '0.14';
with 'MooseX::Daemonize::WithPidFile',
'MooseX::Getopt';
# Try SIGINT ... 2s ... SIGTERM ... 2s ... SIGKILL ... 3s ... UNDEAD!
my $terminating_signal;
- for ( [ 2, $timeout ], [15, $timeout], [9, $timeout * 1.5] ) {
+ for ( [ 'INT', $timeout ], ['TERM', $timeout], ['KILL', $timeout * 1.5] ) {
my ($signal, $timeout) = @$_;
$timeout = int $timeout;
}
if($terminating_signal) {
- if($terminating_signal == 9) {
- # clean up the pidfile ourselves iff we used -9 and it worked
- warn "Had to resort to 'kill -9' and it worked, wiping pidfile";
+ if($terminating_signal eq 'KILL') {
+ # clean up the pidfile ourselves iff we used KILL and it worked
+ warn "Had to resort to 'kill -KILL' and it worked, wiping pidfile";
eval { $self->pidfile->remove };
if ($@) {
warn "Could not remove pidfile ("
appropriately to Signals. This module provides a set of basic roles as an
infrastructure to do that.
+=head1 CAVEATS
+
+When going into background MooseX::Daemonize closes all open file
+handles. This may interfere with you logging because it may also close the log
+file handle you want to write to. To prevent this you can either defer opening
+the log file until after start. Alternatively, use can use the
+'dont_close_all_files' option either from the command line or in your .sh
+script.
+
+Assuming you want to use Log::Log4perl for example you could expand the
+MooseX::Daemonize example above like this.
+
+ after start => sub {
+ my $self = shift;
+ return unless $self->is_daemon;
+ Log::Log4perl->init(\$log4perl_config);
+ my $logger = Log::Log4perl->get_logger();
+ $logger->info("Daemon started");
+ # your daemon code here ...
+ };
+
+
=head1 ATTRIBUTES
This list includes attributes brought in from other roles as well
If true, the process won't background. Useful for debugging. This option can
be set via Getopt's -f.
+=item I<no_double_fork Bool>
+
+If true, the process will not perform the typical double-fork, which is extra
+added protection from your process accidentally aquiring a controlling terminal.
+More information can be found by Googling "double fork daemonize".
+
+=item I<ignore_zombies Bool>
+
+If true, the process will not clean up zombie processes.
+Normally you don't want this.
+
+=item I<dont_close_all_files Bool>
+
+If true, the objects open filehandles will not be closed when daemonized.
+Normally you don't want this.
+
+
=item I<is_daemon Bool>
If true, the process is the backgrounded daemon process, if false it is the
=head1 LICENCE AND COPYRIGHT
-Copyright (c) 2007-2010, Chris Prather C<< <chris@prather.org> >>. Some rights
+Copyright (c) 2007-2011, Chris Prather C<< <chris@prather.org> >>. Some rights
reserved.
This module is free software; you can redistribute it and/or