Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling

Re: Gracefully exiting daemons

by Brovnik (Hermit)
on Jun 25, 2001 at 03:33 UTC ( #91148=note: print w/replies, xml ) Need Help??

in reply to Gracefully exiting daemons

I use the following in a backup script.
#... $SIG{'INT'} = 'cleanup'; # we want to rewind tape & write to log $SIG{'HUP'} = 'cleanup'; # we want to rewind tape & write to log # later... sub cleanup { # Normal is set to true if the script has got through the # rest. &report("\nAbnormal exit, cleaning up") unless $normal; if ($normal) { &eject(); } else { &rewind(); &eject() if $opt{e}; } # Report and other stuff here deleted. }
/etc/init.d (on many unixes) will have examples of start/stop scripts. Stopping is often done by signalling using a stored Process ID, so the $SIG{INT} handler handles both unexpected kills and 'normal' kills e.g. from a shutdon command.

Replies are listed 'Best First'.
Re: Re: Gracefully exiting daemons
by asiufy (Monk) on Jun 25, 2001 at 22:02 UTC
    I could have a global variable being updated throughout the script, with the current state of execution, and in case the signal is trapped, I can then act/log based upon it...

    Almost there, but not entirely what I wanted... Isn't there a way to actually delay the execution of the sub as the signal is received? That would allow the script to finish whatever it was doing at the time (if it was doing anything), and only then die gracefully...
      You can of course catch the signal and do nothing, or (as here) just set a variable for you to look at later.
      $SIG{HUP} = \&catch; my $caught = 0; my $count = 0; print "I am $$, HUP me\n"; for (0..10) { sleep (5); # pretending to do stuff print "$_\n"; } die "I was HUPed $caught times" if $caught; ### Subroutines below sub catch { $caught++; }
      You should of course think carefully about ignoring signals, expecially INT and TERM, since if you get these, someone/something is trying to tell you something.

      But, delaying handling e.g. HUP or USR1 until it is a better time to handle is OK.

      Make sure you document the signal handling well, specially if it is not expected behaviour. E.g. HUP is often used to mean "Please reread your config file".

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://91148]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (3)
As of 2017-02-26 01:27 GMT
Find Nodes?
    Voting Booth?
    Before electricity was invented, what was the Electric Eel called?

    Results (369 votes). Check out past polls.