如何阻止 God 留下陈旧的 Resque 工作进程?

2024-01-08

我试图了解如何监控 resque 工作人员特拉维斯-ci https://github.com/travis-ci/travis-ci以这样的方式与上帝合作,通过上帝停止 resque 手表不会留下陈旧的工作进程。

下面我讨论的是工作进程,而不是分叉的作业子进程(即队列始终为空)。

当我像这样手动启动 resque 工作程序时:

$ QUEUE=builds rake resque:work

我将得到一个进程:

$ ps x | grep resque
 7041 s001  S+     0:05.04 resque-1.13.0: Waiting for builds

一旦我停止工作任务,这个过程就会消失。

但当我开始与上帝做同样的事情时(确切的配置在这里 https://github.com/travis-ci/travis-ci/blob/master/config/resque.god.example,基本上与雷斯克/上帝的例子 https://github.com/defunkt/resque/blob/master/examples/god/resque.god) 像这样 ...

$ RAILS_ENV=development god -c config/resque.god -D
I [2011-03-27 22:49:15]  INFO: Loading config/resque.god
I [2011-03-27 22:49:15]  INFO: Syslog enabled.
I [2011-03-27 22:49:15]  INFO: Using pid file directory: /Volumes/Users/sven/.god/pids
I [2011-03-27 22:49:15]  INFO: Started on drbunix:///tmp/god.17165.sock
I [2011-03-27 22:49:15]  INFO: resque-0 move 'unmonitored' to 'init'
I [2011-03-27 22:49:15]  INFO: resque-0 moved 'unmonitored' to 'init'
I [2011-03-27 22:49:15]  INFO: resque-0 [trigger] process is not running (ProcessRunning)
I [2011-03-27 22:49:15]  INFO: resque-0 move 'init' to 'start'
I [2011-03-27 22:49:15]  INFO: resque-0 start: cd /Volumes/Users/sven/Development/projects/travis && rake resque:work
I [2011-03-27 22:49:15]  INFO: resque-0 moved 'init' to 'start'
I [2011-03-27 22:49:15]  INFO: resque-0 [trigger] process is running (ProcessRunning)
I [2011-03-27 22:49:15]  INFO: resque-0 move 'start' to 'up'
I [2011-03-27 22:49:15]  INFO: resque-0 moved 'start' to 'up'
I [2011-03-27 22:49:15]  INFO: resque-0 [ok] memory within bounds [784kb] (MemoryUsage)
I [2011-03-27 22:49:15]  INFO: resque-0 [ok] process is running (ProcessRunning)
I [2011-03-27 22:49:45]  INFO: resque-0 [ok] memory within bounds [784kb, 784kb] (MemoryUsage)
I [2011-03-27 22:49:45]  INFO: resque-0 [ok] process is running (ProcessRunning)

然后我会得到一个额外的过程:

$ ps x | grep resque
 7187   ??  Ss     0:00.02 sh -c cd /Volumes/Users/sven/Development/projects/travis && rake resque:work
 7188   ??  S      0:05.11 resque-1.13.0: Waiting for builds
 7183 s001  S+     0:01.18 /Volumes/Users/sven/.rvm/rubies/ruby-1.8.7-p302/bin/ruby /Volumes/Users/sven/.rvm/gems/ruby-1.8.7-p302/bin/god -c config/resque.god -D

上帝似乎只记录第一个的 pid:

$ cat ~/.god/pids/resque-0.pid
7187

当我通过上帝停止救援手表时:

$ god stop resque
Sending 'stop' command

The following watches were affected:
  resque-0

上帝给出了这个日志输出:

I [2011-03-27 22:51:22]  INFO: resque-0 stop: default lambda killer
I [2011-03-27 22:51:22]  INFO: resque-0 sent SIGTERM
I [2011-03-27 22:51:23]  INFO: resque-0 process stopped
I [2011-03-27 22:51:23]  INFO: resque-0 move 'up' to 'unmonitored'
I [2011-03-27 22:51:23]  INFO: resque-0 moved 'up' to 'unmonitored'

但它实际上并没有终止这两个进程,而是让实际的工作进程保持活动状态:

$ ps x | grep resque
 6864   ??  S      0:05.15 resque-1.13.0: Waiting for builds
 6858 s001  S+     0:01.36 /Volumes/Users/sven/.rvm/rubies/ruby-1.8.7-p302/bin/ruby /Volumes/Users/sven/.rvm/gems/ruby-1.8.7-p302/bin/god -c config/resque.god -D

你需要告诉上帝使用rescue生成的pid文件并设置pid文件

w.env = {'PIDFILE' => '/path/to/resque.pid'}
w.pid_file = '/path/to/resque.pid'

env 会告诉rescue 写入pid 文件,pid_file 会告诉god 使用它

也正如 svenfuchs 指出的那样,仅设置适当的环境就足够了:

w.env = { 'PIDFILE' => "/home/travis/.god/pids/#{w.name}.pid" }

其中 /home/travis/.god/pids 是默认的 pids 目录

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何阻止 God 留下陈旧的 Resque 工作进程? 的相关文章

  • sudo:rvm:找不到命令 - Ubuntu 12.04 服务器上的 RVM 多用户安装

    我正在设置服务器 它是 Ubuntu 12 04 首先我安装了RVM多用户 me ubuntu curl L https get rvm io sudo bash s stable 然后在安装 RVM 后 按照安装提示 我将自己添加到 RV
  • Rails JSON 多重嵌套关联

    我有一个对象 测试列表 其中包含问题和奖励问题 每个问题都有一个主题模型 我试图将它们全部包含在 JSON API 中 但我不断收到奇怪的难以理解的语法错误消息 我可以让它处理问题和主题或奖励问题和主题 但不能同时处理两者 这是我现在所拥有
  • 如何使用 nokogiri 解析 XML 而不丢失 HTML 实体?

    如果您查看后面部分中的输出 ruby 会删除所有 html 实体 如何使用 nokogiri 解析 XML 而不丢失 HTML 实体 BEFORE
  • 使用单表继承更改 Rails 中 ActiveRecord 类的类型

    我有两种类型的课程 BaseUser lt ActiveRecord Base and User lt BaseUser 它使用 Authlogic 的身份验证系统来 acts as authentic 这种继承是使用单表继承来实现的 如果
  • vscode( vscode-ruby + rubocop ) 如何在保存时自动更正?

    环境 vscode 版本1 19 1 1 19 1 鲁博科普 0 52 1 Darwin mbp 16 7 0 Darwin 内核版本 16 7 0 2017 年 10 月 4 日星期三 00 17 00 PDT 根 xnu 3789 71
  • 声明实例变量迭代哈希!

    我想做以下事情 我想声明一个迭代字典的类的实例变量 假设我有这个哈希 hash key1 gt value1 key2 gt value2 key3 gt value3 我想将每个键作为类的实例变量 我想知道我是否可以声明迭代该哈希的变量
  • 运行“bundle install”失败并要求我运行“bundle install”

    事实上 当从我从 git 存储库克隆的现有 Rails 应用程序内部运行时 所有与 gem 相关的命令都会导致相同的错误消息 bundle install Could not find tzinfo 0 3 27 in any of the
  • 使用rails-Ajax 调用控制器方法?

    我正在尝试从视图中的按钮执行 application controller rb 中的 Ruby 方法 在昨天的一篇文章中 有人告诉我使用 Ajax 调用来执行此操作 因为如果没有它 只会在页面加载时运行 我对此很陌生 很难理解它 我安装了
  • ruby Sequel gem - 如何使用 pg_array 扩展查询数组

    我正在使用pg array http sequel jeremyevans net rdoc plugins files lib sequel extensions pg array rb html扩展和续集版本 4 1 1 我添加了这样的
  • 葡萄错误处理策略?

    我正在使用 Grape 和 Rails 创建 REST API 我已经有了基本的架构 并且正在寻找可以 清理 东西的地方 其中之一是错误处理 处理 我目前正在修复整个 API 的 root rb GRAPE API 基类 文件中的错误 我对
  • 安装heroku toolbelt后出现Ruby错误

    我正在 win 7 32 位系统上使用 Heroku 但我没有管理员权限 我已经下载并安装了heroku工具带如下http community webfaction com questions 11803 heroku toolbelt h
  • ruby:类实例变量与实例变量

    我的想法是为来自不同国家的人们创建一个社区维基java因为读了很多解释 我无法理解任何东西 直到我真正尝试了一些东西 拼图的各个部分开始找到它们的位置 但我首先需要确保我做对了 来自这样的背景 我很困惑地发现 variable可能意味着两个
  • before_filter set_locale 除了控制器

    My routes rb MyApp Application routes draw do scope locale do all resources here end namespace blog do resources posts o
  • 如何在没有 sudo 的情况下安装 gem

    在我所有的 gem 安装中 我必须执行 sudo 所以 sudo gem 安装rails 会起作用 而只有 宝石安装导轨 不管用 我该如何补救 我安装了rvm murtaza murtaza dev which rvm home murta
  • Ruby IMAP 库:如何显示文件夹中的所有邮件?

    我需要一个脚本来获取所有文件夹中的所有电子邮件 并对其及其附件进行本地备份 here https www ombulabs com blog ruby imap a comprehensive guide to interacting wi
  • Rails 路由:向 root 添加(浅层)关注

    在我的routes rb中 我定义了一个问题 如下所示 concern namespaceable do resources comments do resources replies 现在 我可以将此问题添加到任何资源中 resource
  • ruby require 问题(与 $LOAD_PATH 有关)

    我正在尝试使用我刚刚安装的 gem 通过sudo gem install excelsior 像这样 需要 红宝石 要求 精益求精 这在 irb 中工作得很好 但是当我将完全相同的代码粘贴到 rb 文件中并尝试使用 ruby 运行它时 我得
  • 在 Rails 6 上添加外部 js 文件

    我在 app gt javascript gt packs 下创建了一个名为 custom 的文件夹 并放置以下外部 js metisMenu min js startmin js 然后在 app gt javascript gt pack
  • 哈米尔评论结束

    我是哈米尔新手 这让我很困惑 我不喜欢删除可以注释掉的代码 但我不知道如何在 haml 中正确结束注释 这是一个代码片段 field f label member id br f text field member id field f l
  • RVM 要求错误

    我安装了 OS X Mavericks 并且正在尝试运行rvm requirements在终端中 它给了我这个错误 Installing required packages autoconf automake libtool pkgconf

随机推荐

  • 从 javascript 加载另一个 html 页面

    是否可以从 html 页面加载 Javascript 程序 然后让 Javascript 加载另一个 html 页面而不是加载程序的页面 是的 在 JavaScript 代码中 window location href http new w
  • 将 std::variant 转换为具有类型超集的另一个 std::variant

    我有一个std variant我想转换为另一个std variant它有一个其类型的超集 有没有一种方法可以让我简单地将一个分配给另一个 template
  • 在 C# 中以编程方式隐藏目录

    我想在 Windows Vista 中隐藏一个目录 只是从视图中没有完全隐藏 就像您从文件夹选项中设置的那样 我尝试了一些与我看到的例子类似的东西 只是我稍微修改了一下 这是我的所有代码的组合 using System using Syst
  • Apache FileUtils.copyDirectory(...) 的进度条

    有谁知道 Apache 进度条的实现方法FileUtils copyDirectory File src File dst 我没有看到任何有帮助的JavaDocs http commons apache org io api release
  • 使用graphics.h时未定义引用?

    我正在尝试在 dev C 5 7 1 中使用graphics h 我已经在互联网上搜索了可用的选项 我在包含文件夹中下载了graphics h库 并在参数选项中选择了以下内容 lbgi lgdi32 lcomdlg32 luuid lole
  • 使用 str[i]-'0' (其中 str 是字符串)的目的是什么?

    我正在寻求解决我自己解决的问题 我遇到的许多解决方案都使用 str i 0 的这种表示法来对存储有数字的字符串 str 执行计算 下面的代码比较两个这样的字符串 以计算两个字符串中具有相同索引位置的数字 并为两个字符串中出现但不具有相同索引
  • 单击时在引导模式中打开 Iframe

    我正在尝试创建一个按钮来打开包含 iframe 的模式 iframe 仅应在模式打开后加载 现在 当我单击按钮打开模式时 没有加载任何内容 并且控制台中没有给出任何错误 我正在关注我发现的旧片段here https www bootply
  • AttributeError:模块“torchtext.data”没有属性“Field”

    我想运行一个 gitproject https github com fastnlp style transformer使用 pytorch 和 torchtext 但当我运行它时 它会引发错误 File main py line 60 i
  • 找不到 gfortran 4.8 来构建包

    我正在尝试安装deldirR 中的包通过install packages deldir type source 但收到以下错误消息 这是 OSX Mavericks installing source package deldir pack
  • 基于日期的条件格式

    尝试在 Excel 中设置工作时间卡 将日期放在工作表的左侧 2011 年 1 月 1 日星期五 2011 年 1 月 2 日星期六 2011 年 1 月 3 日星期日 等等 我想将周末日期的行灰显 如下所示 2011 年 1 月 1 日星
  • 您是否可以在 XML 中声明和使用变量而不使用 XSL 来转换/解析 XML

    假设您想要在应用程序中读取一个 XML 元素 但是您有多个环境 其中依赖文件的路径可能会发生变化
  • Python _winreg 的问题

    我正在尝试访问 Windows 注册表 在 Python 中 以使用以下命令查询键值 winreg我无法让它工作 以下行返回一个 WindowsError 指出 系统找不到指定的文件 key winreg OpenKey winreg HK
  • Selenium - “Firefox 已经在运行”错误

    我们正在使用 selenium 运行一些测试 为此 我们有专用的 Windows XP VM 每个 VM 上都有一个 selenium RC 服务器 并且该 VM 上没有运行其他进程 我们为每个测试打开和关闭一个 Selenium 会话 测
  • FSEvents C++ 示例

    我需要为 Mac 中的文件夹创建 FSEvents 观察器 我对 C 很熟悉 有没有办法在 C 代码中而不是 Objective C 中获取 FSEvents 通知 是否有一些示例代码可以开始以及我需要包含的任何库 我已经在这个页面了 ht
  • 当应用程序是代理时,如何在 Mac OS X 中取消关闭?

    我有一个 Java 应用程序 需要从 Dock 中隐藏 并且还需要能够中断 这就是我处理关闭的方式 import com apple eawt AppEvent QuitEvent import com apple eawt QuitHan
  • 如何在 SwiftUI 中为 WKWebView 创建浏览器选项卡

    我正在尝试构建一个新的选项卡功能 但我不太确定如何实现这一点 我在设置新的或以前的 WKWebView 时遇到问题 如果 url 无效 我如何显示 errorView 这是我到目前为止所拥有的 编辑 我不太确定如何初始化或如何创建 inva
  • 为什么 Cabal 不超链接我的来源?

    cabal version cabal install version 1 22 2 0 using version 1 22 2 0 of the Cabal library cabal install haddock hyperlink
  • Android 中用于标准化电话号码的任何 API

    android 中有没有可以标准化电话号码的API 例如当我查找电话号码时 有时是2223334444有时是 2223334444 谢谢 Android 有专门的类用于此目的 android telephony PhoneNumberUti
  • 从请求范围的 CDI Bean 获取对会话范围的 CDI bean 的访问

    我已经有一个会话范围的 CDI bean 它保存当前登录的用户数据 现在 从另一个请求范围内 我想访问这个 bean 以获取一些数据 我有一些操作要做 这取决于用户登录 这是我需要的唯一信息 如何访问它 AccountBean java N
  • 如何阻止 God 留下陈旧的 Resque 工作进程?

    我试图了解如何监控 resque 工作人员特拉维斯 ci https github com travis ci travis ci以这样的方式与上帝合作 通过上帝停止 resque 手表不会留下陈旧的工作进程 下面我讨论的是工作进程 而不是