Как мне запустить фоновый процесс в Ruby?

#ruby #background #amazon-elastic-beanstalk

#ruby #фон #amazon-elastic-beanstalk

Вопрос:

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

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