X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMooseX%2FDaemonize.pm;h=4d21a262c7f8417ad1fa2aae8292b5001b314313;hb=92b4ca7e92855805646082226e3632d94f178861;hp=c7be66a8c788f0d8a3793dfd9a7fd7fc906d3b53;hpb=1d85c76d2da46df3e779e574396f7eba5bf53fdb;p=gitmo%2FMooseX-Daemonize.git diff --git a/lib/MooseX/Daemonize.pm b/lib/MooseX/Daemonize.pm index c7be66a..4d21a26 100644 --- a/lib/MooseX/Daemonize.pm +++ b/lib/MooseX/Daemonize.pm @@ -2,8 +2,9 @@ package MooseX::Daemonize; use strict; # because Kwalitee is pedantic use Moose::Role; use MooseX::Types::Path::Class; +use File::Path qw(make_path); -our $VERSION = "0.10"; +our $VERSION = '0.13'; with 'MooseX::Daemonize::WithPidFile', 'MooseX::Getopt'; @@ -81,6 +82,15 @@ has exit_code => ( sub init_pidfile { my $self = shift; my $file = $self->pidbase . '/' . $self->progname . '.pid'; + + if ( !-d $self->pidbase ) { + make_path( $self->pidbase, { error => \my $err } ); + if (@$err) { + confess sprintf( "Cannot create pidbase directory '%s': %s", + $self->pidbase, @$err ); + } + } + confess "Cannot write to $file" unless (-e $file ? -w $file : -w $self->pidbase); MooseX::Daemonize::Pid::File->new( file => $file ); } @@ -342,6 +352,28 @@ Often you want to write a persistant daemon that has a pid file, and responds 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 @@ -368,6 +400,23 @@ The file we store our PID in, defaults to C<$pidbase/$progname.pid> If true, the process won't background. Useful for debugging. This option can be set via Getopt's -f. +=item I + +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 + +If true, the process will not clean up zombie processes. +Normally you don't want this. + +=item I + +If true, the objects open filehandles will not be closed when daemonized. +Normally you don't want this. + + =item I If true, the process is the backgrounded daemon process, if false it is the @@ -520,7 +569,7 @@ L. =head1 SEE ALSO -L, L +L, L, L =head1 AUTHORS @@ -537,7 +586,7 @@ Some bug fixes sponsored by Takkle Inc. =head1 LICENCE AND COPYRIGHT -Copyright (c) 2007-2010, Chris Prather C<< >>. Some rights +Copyright (c) 2007-2011, Chris Prather C<< >>. Some rights reserved. This module is free software; you can redistribute it and/or