gpt4 book ai didi

ruby - 如何在 Ruby 中启动后台进程?

转载 作者:数据小太阳 更新时间:2023-10-29 08:54:13 24 4
gpt4 key购买 nike

我在用 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 | 打印的 pid 不匹配? grep ruby ?

我已经尝试使用 exec%x{} 和这个 system 来运行脚本。

最佳答案

如果你使用run_proc,你想要守护进程的代码应该放在 block 中。使用 system 启动另一个进程没有意义(它将 fork 进程(给你另一个 pid),然后 exec 你的工作.rb 脚本。将代码从 jobs.rb 移动到 run_proc block 中,或使用 Daemons.run

关于ruby - 如何在 Ruby 中启动后台进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5626067/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com