Implement async signal trap via Mojo::IOLoop::Signal for more robust app stop and restart
This commit is contained in:
@@ -20,6 +20,7 @@ use English qw ( -no_match_vars );
|
|||||||
use Digest::SHA qw (sha1_base64);
|
use Digest::SHA qw (sha1_base64);
|
||||||
use Hailo;
|
use Hailo;
|
||||||
use Mojo::IOLoop;
|
use Mojo::IOLoop;
|
||||||
|
use Mojo::IOLoop::Signal;
|
||||||
use Mojo::Log;
|
use Mojo::Log;
|
||||||
# Чтобы "уж точно" использовать hiredis-биндинги, загрузим этот модуль перед Mojo::Redis
|
# Чтобы "уж точно" использовать hiredis-биндинги, загрузим этот модуль перед Mojo::Redis
|
||||||
use Protocol::Redis::XS;
|
use Protocol::Redis::XS;
|
||||||
@@ -351,6 +352,18 @@ my $parse_message = sub {
|
|||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
my $__signal_handler = sub {
|
||||||
|
my ($self, $name) = @_;
|
||||||
|
$log->info ("[INFO] Caught a signal $name");
|
||||||
|
|
||||||
|
if (defined $main::pidfile && -f $main::pidfile) {
|
||||||
|
unlink $main::pidfile;
|
||||||
|
}
|
||||||
|
|
||||||
|
exit 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
# Main loop, он же event loop
|
# Main loop, он же event loop
|
||||||
sub RunCraniac () {
|
sub RunCraniac () {
|
||||||
$log->info ("[INFO] Connecting to $c->{server}, $c->{port}");
|
$log->info ("[INFO] Connecting to $c->{server}, $c->{port}");
|
||||||
@@ -392,6 +405,11 @@ sub RunCraniac () {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Mojo::IOLoop::Signal->on (
|
||||||
|
TERM => $__signal_handler,
|
||||||
|
INT => $__signal_handler
|
||||||
|
);
|
||||||
|
|
||||||
do { Mojo::IOLoop->start } until Mojo::IOLoop->is_running;
|
do { Mojo::IOLoop->start } until Mojo::IOLoop->is_running;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user