diff options
Diffstat (limited to 'lib/presque/worker/Role/Management.pm')
| -rw-r--r-- | lib/presque/worker/Role/Management.pm | 39 |
1 files changed, 37 insertions, 2 deletions
diff --git a/lib/presque/worker/Role/Management.pm b/lib/presque/worker/Role/Management.pm index 2bd4db3..cdfcd6d 100644 --- a/lib/presque/worker/Role/Management.pm +++ b/lib/presque/worker/Role/Management.pm @@ -6,7 +6,7 @@ has shut_down => (is => 'rw', isa => 'Bool', default => 0,); before start => sub { my $self = shift; - $self->rest_register_worker + $self->rest_register_worker; }; after start => sub { @@ -14,6 +14,41 @@ after start => sub { $self->rest_unregister_worker; }; -# XXX reg signal +before start => sub { + my $self = shift; + $SIG{'INT'} = sub { $self->_shutdown }; + $SIG{'TERM'} = sub { $self->_shutdown }; + $SIG{'QUIT'} = sub { $self->_graceful_shutdown }; + $SIG{'USR1'} = sub { $self->_kill_child }; +}; + +sub _shutdown { + my $self = shift; + $self->logger->log( + level => 'info', + message => 'worker ' . $self->worker_id . ' shuting down' + ); + $self->shut_down(1); + $self->_kill_child(); +} + +sub _graceful_shutdown { + my $self = shift; + $self->logger->log( + level => 'info', + message => 'worker ' . $self->worker_id . ' kill child' + ); + $self->shut_down(1); + $self->_kill_child(); +} + +sub _kill_child { + my $self = shift; + $self->logger->log( + level => 'info', + message => 'worker ' . $self->worker_id . ' shuting down gracefuly' + ); +} 1; + |
