Как запустить фоновый процесс в Ruby? - PullRequest
2 голосов
/ 11 апреля 2011

У меня возникают некоторые трудности с запуском фонового процесса в 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 для запуска скрипта.

1 Ответ

3 голосов
/ 11 апреля 2011

Если вы используете run_proc, код, который вы хотите демонизировать, должен идти в блоке. Запуск другого процесса с system не имеет смысла (это будет fork процесс (давая вам еще один pid), а затем exec ваш скрипт jobs.rb. Либо переместите код из jobs.rb в run_proc блок или используйте Daemons.run

...