From: Stevan Little Date: Thu, 29 Nov 2007 21:44:33 +0000 (+0000) Subject: rollin, rollin, rollin on the river X-Git-Tag: 0_06~23 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=18cc5c89142d5f39decc3098fd26077654d05c6d;p=gitmo%2FMooseX-Daemonize.git rollin, rollin, rollin on the river --- diff --git a/lib/MooseX/Daemonize.pm b/lib/MooseX/Daemonize.pm index ffae577..0cf7257 100644 --- a/lib/MooseX/Daemonize.pm +++ b/lib/MooseX/Daemonize.pm @@ -10,7 +10,11 @@ use Carp 'carp'; use Proc::Daemon; use MooseX::Daemonize::PidFile; -with qw(MooseX::Getopt); +with qw[ + MooseX::Daemonize::Core + MooseX::Daemonize::SignalHandling + MooseX::Getopt +]; has progname => ( isa => 'Str', @@ -73,11 +77,6 @@ has foreground => ( default => sub { 0 }, ); -has is_daemon => ( - isa => 'Bool', - is => 'rw', - default => sub { 0 }, -); has stop_timeout => ( isa => 'Int', @@ -85,13 +84,6 @@ has stop_timeout => ( default => sub { 2 } ); -sub daemonize { - my ($self) = @_; - return if Proc::Daemon::Fork; - Proc::Daemon::Init; - $self->is_daemon(1); -} - sub start { my ($self) = @_; @@ -135,10 +127,10 @@ sub restart { $self->start(); } -sub setup_signals { - my ($self) = @_; - $SIG{INT} = sub { $self->handle_sigint; }; - $SIG{HUP} = sub { $self->handle_sighup }; +sub handle_signal { + my ($self, $signal) = @_; + return $self->handle_sigint if $signal eq 'INT'; + return $self->handle_sighup if $signal eq 'HUP'; } sub handle_sigint { $_[0]->stop; } diff --git a/lib/MooseX/Daemonize/Core.pm b/lib/MooseX/Daemonize/Core.pm new file mode 100644 index 0000000..dbf892e --- /dev/null +++ b/lib/MooseX/Daemonize/Core.pm @@ -0,0 +1,163 @@ +package MooseX::Daemonize::Core; +use strict; # because Kwalitee is pedantic +use Moose::Role; + +our $VERSION = 0.01; + +use Proc::Daemon; + +has is_daemon => ( + isa => 'Bool', + is => 'rw', + default => sub { 0 }, +); + +sub daemon_fork { Proc::Daemon::Fork } +sub daemon_detach { Proc::Daemon::Init } + +sub daemonize { + my ($self) = @_; + return if $self->daemon_fork; + $self->daemon_detach; + $self->is_daemon(1); +} + +1; +__END__ + +=head1 NAME + +MooseX::Daemonize::Core - provides a Role the core daemonization features + +=head1 VERSION + +=head1 SYNOPSIS + +=head1 DESCRIPTION + +=head1 ATTRIBUTES + +=over + +=item is_daemon Bool + +If true, the process is the backgrounded process. This is useful for example +in an after 'start' => sub { } block + +=back + +=head1 METHODS + +=over + +=item daemon_fork() + +=item daemon_detach() + +=item daemonize() + +Calls C to daemonize this process. + +=item setup_signals() + +Setup the signal handlers, by default it only sets up handlers for SIGINT and SIGHUP + +=item handle_sigint() + +Handle a INT signal, by default calls C<$self->stop()> + +=item handle_sighup() + +Handle a HUP signal. By default calls C<$self->restart()> + +=item meta() + +The C method from L + +=back + +=head1 DEPENDENCIES + +=for author to fill in: + A list of all the other modules that this module relies upon, + including any restrictions on versions, and an indication whether + the module is part of the standard Perl distribution, part of the + module's distribution, or must be installed separately. ] + +Obviously L, and L + +=head1 INCOMPATIBILITIES + +=for author to fill in: + A list of any modules that this module cannot be used in conjunction + with. This may be due to name conflicts in the interface, or + competition for system or program resources, or due to internal + limitations of Perl (for example, many modules that use source code + filters are mutually incompatible). + +None reported. + + +=head1 BUGS AND LIMITATIONS + +=for author to fill in: + A list of known problems with the module, together with some + indication Whether they are likely to be fixed in an upcoming + release. Also a list of restrictions on the features the module + does provide: data types that cannot be handled, performance issues + and the circumstances in which they may arise, practical + limitations on the size of data sets, special cases that are not + (yet) handled, etc. + +No bugs have been reported. + +Please report any bugs or feature requests to +C, or through the web interface at +L. + +=head1 SEE ALSO + +L, L, L + +=head1 AUTHOR + +Chris Prather C<< >> + +=head1 THANKS + +Mike Boyko, Matt S. Trout, Stevan Little, Brandon Black, Ash Berlin and the +#moose denzians + +Some bug fixes sponsored by Takkle Inc. + +=head1 LICENCE AND COPYRIGHT + +Copyright (c) 2007, Chris Prather C<< >>. All rights +reserved. + +This module is free software; you can redistribute it and/or +modify it under the same terms as Perl itself. See L. + + +=head1 DISCLAIMER OF WARRANTY + +BECAUSE THIS SOFTWARE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER +EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE +ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH +YOU. SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL +NECESSARY SERVICING, REPAIR, OR CORRECTION. + +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE SOFTWARE AS PERMITTED BY THE ABOVE LICENCE, BE +LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL, +OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE +THE SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE SOFTWARE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. diff --git a/lib/MooseX/Daemonize/SignalHandling.pm b/lib/MooseX/Daemonize/SignalHandling.pm new file mode 100644 index 0000000..0b7cbfe --- /dev/null +++ b/lib/MooseX/Daemonize/SignalHandling.pm @@ -0,0 +1,28 @@ +package MooseX::Daemonize::SignalHandling; +use strict; # because Kwalitee is pedantic +use Moose::Role; + +our $VERSION = 0.01; + +# NOTE: +# this would be an excellent canidate for +# a parameterized role, since we would want +# to have the ability to specify which +# signals we want handled + +requires 'handle_signal'; + +sub setup_signals { + my $self = shift; + foreach my $signal (qw[ INT HUP ]) { + $SIG{$signal} = sub { $self->handle_signal($signal) }; + } +} + +1; + +__END__ + +=pod + +=cut \ No newline at end of file