Как да стартирам фонов процес в Ruby?

Имам известни затруднения при стартирането на фонов процес в Ruby.

В момента имам този код.

#!/usr/bin/env ruby -w
require "daemons"
require 'rubygems'

path = "#{File.expand_path(File.dirname(__FILE__))}/.."

Daemons.run_proc('stalker',{
  :dir_mode => :normal,
  :dir => "#{path}/tmp/pids",
  :backtrace => true,
  :monitor => false,
  :log_output => true
}) do
  system "stalk #{path}/config/jobs.rb"
end

След това стартирам скрипта с помощта на script/stalker start.

Проблемът е, че не мога да го спра. Той записва грешния PID в pid файла.

Като този:

script/stalker start
=> stalker: process with pid **39756** started.

ps aux | grep ruby 
=> linus    **39781**   0,3  1,9  2522752  78864   ??  S     8:39pm   0:10.11 ruby stalk script/../config/jobs.rb

Защо първият pid не съвпада с този, отпечатан с помощта на ps aux | grep ruby?

Опитах да използвам exec, %x{} и този system, за да стартирам скрипта.


person Linus Oleander    schedule 11.04.2011    source източник


Отговори (1)


Ако използвате run_proc, кодът, който искате да се демонизира, трябва да влезе в блока. Стартирането на друг процес с system няма смисъл (То ще fork процеса (давайки ви още един pid) и след това exec вашия скрипт jobs.rb. Или преместете кода от jobs.rb в блока run_proc, или използвайте Daemons.run

person cam    schedule 11.04.2011