From: Jos Backus Date: 2007-08-18T02:59:52+09:00 Subject: Slave not removing slave_proc_* files Hi. In order to be able to run swiftiply_mongrel_rails under daemontools I patched swiftiply_mongrel_rails to use Ara's Slave library. The patch does essentially this: slaves = [] 3.times do |i| require 'slave' require "#{File.dirname(__FILE__)}/mongrel_rails" slaves << Slave.object(:async => true) { Mongrel::Runner.new.run(args) # args == similar to mongrel_rails # command line args } end slaves.each {|t| t.join} (See http://rubyforge.org/pipermail/swiftiply-users/2007-August/000054.html for the actual patch). Note that Mongrel::Runner.new.run never returns, hence the use of the :async option. It is just a wrapper around mongrel_rails. When a SIGTERM is sent to the swiftiply_mongrel_rails process, the following output is seen: http://pastie.caboo.se/88665 This shows swiftiply_mongrel_rails as well as its slaves exiting, and daemontools subsequently restarting swiftiply_mongrel_rails. Now for the problem: after this, /tmp holds 3 slave_proc_* UNIX domain sockets that have not been unlinked. Subsequent restarts yield more slave_proc_* sockets, and so on. So my question is: what could cause these sockets not to be removed? am I using Slave incorrectly? I instrumented slave.rb to make sure the Kernel.at_exit method is called and it is - it's just that the associated block isn't executed in the SIGTERM case. It works fine when a SIGUSR2 signal is sent - the sockets are cleaned up as expected. A simple test script suggests that Kernel.at_exit works okay on the platform (ruby 1.8.5 from the CentOS testing repo on CentOS 4). Any help is appreciated... -- Jos Backus jos at catnook.com