我在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
打印的pid不匹配?
我尝试使用exec
,%x{}
和一个system
来运行脚本。
答案 0 :(得分:3)
如果您使用run_proc
,您想要守护进程的代码应该在块中。使用system
启动另一个进程没有意义(它将fork
进程(给你另一个pid),然后exec
你的jobs.rb脚本。移动代码jobs.rb
阻止run_proc
,或使用Daemons.run