Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

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.
--
Brovnik


Comment on Re: Gracefully exiting daemons
Download Code
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".
      --
      Brovnik

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://91148]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (11)
As of 2014-10-02 17:04 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    What is your favourite meta-syntactic variable name?














    Results (66 votes), past polls