apps/worker/worker.rb in spiderfw-0.6.5 vs apps/worker/worker.rb in spiderfw-0.6.6
- old
+ new
@@ -31,19 +31,19 @@
return unless Spider.conf.get('worker.enable')
self.start
end
def self.app_shutdown
- return unless Spider.conf.get('worker.enable')
+ return unless @runner || Spider.conf.get('worker.enable')
@mutex.try_lock || return
Spider::Logger.info("Shutting down worker in #{Process.pid}")
if @runner
unless @runner == Thread.current
@runner.stop
@runner = nil
end
- elsif(File.exist?(@pid_file))
+ elsif File.exist?(@pid_file)
begin
pid = IO.read(@pid_file).to_i
unless pid == Process.pid
Spider::Logger.info("Sending TERM signal to worker #{pid}")
Process::kill 'TERM', pid
@@ -97,17 +97,22 @@
end
@mutex.unlock
end
end
if (options[:fork])
- forked = Spider.fork do
+ Spider.logger.debug("Forking worker in #{Process.pid}")
+ @forked = Spider.fork do
$0 = 'spider-worker'
- trap('TERM') { app_shutdown }
- trap('INT') { app_shutdown }
+ $SPIDER_NO_RESPAWN = true if $SPIDER_SPAWNED
+ Spider.main_process_startup
+ Spider.on_main_process_shutdown do
+ Worker.app_shutdown
+ end
start.call
+ Spider.logger.debug("Forked worker started")
@runner.join if @runner
end
- Process.detach(forked) if (options[:detach])
+ Process.detach(@forked) if (options[:detach])
@runner = nil
else
start.call
end
return @runner