#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