如何在 Ruby 中启动后台进程?
Posted
技术标签:
【中文标题】如何在 Ruby 中启动后台进程?【英文标题】:How do I start a background process in Ruby? 【发布时间】:2011-08-03 07:42:30 【问题描述】:我在 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
移动到@ 987654327@ 屏蔽,或使用Daemons.run
【讨论】:
以上是关于如何在 Ruby 中启动后台进程?的主要内容,如果未能解决你的问题,请参考以下文章
我如何制作一个启动Python脚本的linux后台进程(在c中)