[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

trapping TERM in a daemonized (Daemon gem) script

Dean Holdren

9/28/2007 8:55:00 PM

I'm using the Daemon gem, and I'd like to trap the TERM signal so that
I can have graceful termination of my main execution loop:

$running = true;
Signal.trap("TERM") do
$running = false
end

while($running) do
#some operations that could take a few seconds
sleep(5)
end

However, I get some memory errors when I stop the process, and I can
sometimes get an extra process after a 'restart' is issued, that I
can't kill with a 'stop'

I looked at the source to the Daemon gem, and it warns not to trap the
TERM signal in your script. So how can I gracefully end my loop if I
don't trap TERM?

2 Answers

Tim Pease

9/29/2007 2:43:00 PM

0

On 9/28/07, Dean Holdren <deanholdren@gmail.com> wrote:
> I'm using the Daemon gem, and I'd like to trap the TERM signal so that
> I can have graceful termination of my main execution loop:
>
> $running = true;
> Signal.trap("TERM") do
> $running = false
> end
>
> while($running) do
> #some operations that could take a few seconds
> sleep(5)
> end
>
> However, I get some memory errors when I stop the process, and I can
> sometimes get an extra process after a 'restart' is issued, that I
> can't kill with a 'stop'
>
> I looked at the source to the Daemon gem, and it warns not to trap the
> TERM signal in your script. So how can I gracefully end my loop if I
> don't trap TERM?
>

You can trap any signal and use that to terminate your script. Try
the interrupt signal.

Signal.trap('INT') do
end

To send this to your daemon process on a *NIX host ...

kill -SIGINT pid


Blessings,
TwP

Dean Holdren

10/1/2007 2:16:00 PM

0

well I'd want the 'daemonized' script stopped when I issue
mydaemon_ctl stop, I think under the hood, daemons gem issues a TERM
to the controlled script.

not sure if you're familiar with the daemons gem, but you typically
create a _ctl file that controls a ruby script (with an infinite
loop):

mydaemon_ctl:
Daemons.run File.dirname(__FILE__) + '/orderprocessor.rb', options

mydaemon.rb:
while(true) do
end



On 9/29/07, Tim Pease <tim.pease@gmail.com> wrote:
> On 9/28/07, Dean Holdren <deanholdren@gmail.com> wrote:
> > I'm using the Daemon gem, and I'd like to trap the TERM signal so that
> > I can have graceful termination of my main execution loop:
> >
> > $running = true;
> > Signal.trap("TERM") do
> > $running = false
> > end
> >
> > while($running) do
> > #some operations that could take a few seconds
> > sleep(5)
> > end
> >
> > However, I get some memory errors when I stop the process, and I can
> > sometimes get an extra process after a 'restart' is issued, that I
> > can't kill with a 'stop'
> >
> > I looked at the source to the Daemon gem, and it warns not to trap the
> > TERM signal in your script. So how can I gracefully end my loop if I
> > don't trap TERM?
> >
>
> You can trap any signal and use that to terminate your script. Try
> the interrupt signal.
>
> Signal.trap('INT') do
> end
>
> To send this to your daemon process on a *NIX host ...
>
> kill -SIGINT pid
>
>
> Blessings,
> TwP
>
>