On Thu, 15 Sep 2005, Jamis Buck wrote:

<snip trouble restarting fcgi apps>

how about a completely different approach to restarting - restart without
exiting using the 'exec' system call.  this won't return an exit status to the
fcgi pm and, i think, therefore won't cause trouble:

     [ahoward@localhost html]$ cat reloadable.fcgi
     #! /usr/local/bin/ruby
     require 'fcgi'
     loaded, pid = Time::now, Process::pid

     FCGI.each_cgi do |cgi|
       env = cgi.env_table.sort.map{|kv| kv.join " = "}.join " <br>\n"
       content = <<-html
         command_line : #{ $command_line } <br>
         loaded : #{ loaded } <br>
         pid : #{ pid } <br>
         <hr><hr>
         #{ env }
       html
       cgi.out{ content }
     end

     BEGIN {
       require 'rbconfig'
       $config = ::Config::CONFIG
       $ruby = File::join($config['bindir'], $config['ruby_install_name']) + $config['EXEEXT']
       $this = $0
       $command_line = [$ruby, $this, ARGV].flatten.join(' ')
       trap('USR2'){ exec $command_line }
     }


     [ahoward@localhost html]$ lynx -dump http://localhost/reloadable.fcgi |egrep 'loaded|pid'
        loaded : Thu Sep 15 12:46:36 MDT 2005
        pid : 16018


     [ahoward@localhost html]$ lynx -dump http://localhost/reloadable.fcgi |egrep 'loaded|pid'
        loaded : Thu Sep 15 12:46:36 MDT 2005
        pid : 16018


so we are running in fastcgi mode, the process has been loaded only once.  force a restart:


     [ahoward@localhost html]$ sudo kill -USR2 16018


     [ahoward@localhost html]$ lynx -dump http://localhost/reloadable.fcgi |egrep 'loaded|pid'
        loaded : Thu Sep 15 12:47:33 MDT 2005
        pid : 16018

and it works!


     [ahoward@localhost html]$ lynx -dump http://localhost/reloadable.fcgi |egrep 'loaded|pid'
        loaded : Thu Sep 15 12:47:33 MDT 2005
        pid : 16018

and sticks.


     [ahoward@localhost html]$ sudo kill -USR2 16018


     [ahoward@localhost html]$ lynx -dump http://localhost/reloadable.fcgi |egrep 'loaded|pid'
        loaded : Thu Sep 15 12:47:43 MDT 2005
        pid : 16018


     [ahoward@localhost html]$ lynx -dump http://localhost/reloadable.fcgi |egrep 'loaded|pid'
        loaded : Thu Sep 15 12:47:43 MDT 2005
        pid : 16018


and works again.


checking the log


     [ahoward@localhost html]$ sudo tail -3 /var/log/httpd/error_log
     [Thu Sep 15 12:47:25 2005] [warn] (32)Broken pipe: FastCGI: write() to PM failed (ignore if a restart or shutdown is pending)
     [Thu Sep 15 12:47:40 2005] [warn] (32)Broken pipe: FastCGI: write() to PM failed (ignore if a restart or shutdown is pending)
     [Thu Sep 15 12:47:49 2005] [warn] (32)Broken pipe: FastCGI: write() to PM failed (ignore if a restart or shutdown is pending)

so i guess i'll ignore it.

-a
-- 
===============================================================================
| email :: ara [dot] t [dot] howard [at] noaa [dot] gov
| phone :: 303.497.6469
| Your life dwells amoung the causes of death
| Like a lamp standing in a strong breeze.  --Nagarjuna
===============================================================================