NAME
AnyEvent::Watchdog - generic watchdog/program restarter
SYNOPSIS
# MUST be use'd as the very first thing in the main program
use AnyEvent::Watchdog;
DESCRIPTION
This module implements a watchdog that can repeatedly fork the program and thus effectively restart it - as soon as the module is use'd, it will fork the program (if possible) and continue to run it normally in the child, while the parent becomes a supervisor.
The child can then ask the supervisor to restart itself instead of exiting, or ask the supervisor to restart it gracefully or forcefully.
NOTE: This module MUST be used as the first thing in the main program. It will cause weird effects when used from another module, as perl does not expect to be forked inside BEGIN
blocks.
RECIPES
Use AnyEvent::Watchdog solely as a convinient on-demand-restarter:
use AnyEvent::Watchdog;
# and whenever you wnat to restart (e.g. to upgrade code):
AnyEvent::Watchdog::restart;
Use AnyEvent::Watchdog to kill the program and exit when the event loop fails to run for more than two minutes:
use AnyEvent::Watchdog qw(autorestart heartbeat=120);
Use AnyEvent::Watchdog to automatically restart the program when it fails to handle events for longer than 5 minutes:
use AnyEvent::Watchdog qw(autorestart heartbeat=300);
FUNCTIONS
The module supports the following functions:
- AnyEvent::Watchdog::restart [$timeout]
-
Tells the supervisor to restart the process when it exits, or forcefully after
$timeout
seconds (minimum 1, maximum 255, default 60).Calls
exit 0
to exit the process cleanly. - AnyEvent::Watchdog::autorestart [$boolean]
- use AnyEvent::Watchdog qw(autorestart[=$boolean])
-
Enables or disables autorestart (initially disabled, default for
$boolean
is to enable): By default, the supervisor will exit if the program exits or dies in any way. When enabling autorestart behaviour, then the supervisor will try to restart the program after it dies.Note that the supervisor will never autorestart when the child died with SIGINT or SIGTERM.
- AnyEvent::Watchdog::heartbeat [$interval]
- use AnyEvent::Watchdog qw(heartbeat[=$interval])
-
Tells the supervisor to automatically kill the program if it doesn't react for
$interval
seconds (minium 1, maximum 255, default 60) , then installs an AnyEvent timer the sends a regular heartbeat to the supervisor twice as often.Exit behaviour isn't changed, so if you want a restart instead of an exit, you have to call
autorestart
.The heartbeat frequency can be changed as often as you want, an interval of
0
disables the heartbeat check again.
SEE ALSO
AUTHOR
Marc Lehmann <schmorp@schmorp.de>
http://home.schmorp.de/