如何订阅所有进程的PROCESS_STATE_RUNNING事件

2024-06-28

我在用着主管的事件框架 http://supervisord.org/events.html订阅由 Supervisor 管理的进程的事件。

我的事件监听器,processlistener.py,看起来像这样:

import sys

from supervisor.childutils import listener

def write_stdout(s):
    sys.stdout.write(s)
    sys.stdout.flush()


def write_stderr(s):
    sys.stderr.write(s)
    sys.stderr.flush()


def main():
    while True:
        headers, body = listener.wait(sys.stdin, sys.stdout)
        body = dict([pair.split(":") for pair in body.split(" ")])

        write_stderr("Headers: %r\n" % repr(headers))
        write_stderr("Body: %r\n" % repr(body))

        if headers["eventname"] == "PROCESS_STATE_RUNNING":
            write_stderr("Process state running...\n")


if __name__ == '__main__':
    main()

In my supervisord.conf, 我有:

[program:theprogramname]
command=/bin/cat              ; the program (relative uses PATH, can take args)
process_name=%(program_name)s_%(process_num)s ; process_name expr (default %(program_name)s)
numprocs=1                    ; number of processes copies to start (def 1)

[eventlistener:theeventlistenername]
command=python processlistener.py    ; the program (relative uses PATH, can take args)
process_name=%(program_name)s_%(process_num)s       ; process_name expr (default %(program_name)s)
numprocs=1                           ; number of processes copies to start (def 1)
events=PROCESS_STATE_RUNNING         ; event notif. types to subscribe to (req'd)

通过此配置,我希望每当 Supervisor 管理的进程进入时我的事件侦听器都会收到通知RUNNING状态。然而,这种情况并非如此。当我杀人时theprogramname with a SIGINT信号,该进程由主管重新启动,但我的侦听器没有收到通知。

为了实现我想要的目标,我是否缺少额外的配置?


这是因为您的侦听器需要将“RESULT 2\nOK”响应发送回标准输出上的supervisord。

如果supervisord没有看到这个响应,它认为你的监听器还没有准备好,并且不会发送任何更多的事件。

尝试将其添加到 while 循环中:

listener.ok(sys.stdout)

这告诉监听者发送“OK”响应。

这是ok中的方法supervisor.childutils.listener: https://github.com/Supervisor/supervisor/blob/3.0/supervisor/childutils.py#L61 https://github.com/Supervisor/supervisor/blob/3.0/supervisor/childutils.py#L61

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

如何订阅所有进程的PROCESS_STATE_RUNNING事件 的相关文章

随机推荐

  • 捕获 javax.net.debug 到文件

    我需要将创建的 javax net debug all 输出保存到文件中 我正在使用 log4j 并尝试创建一个日志代理 如下面的代码示例所示 但是 它没有获取信息 我不确定 javax net debug 被打印到哪里 我尝试以这种方式捕
  • docker-compose pull 结果为 x509:证书由未知机构签名

    尝试从 dockerhub 提取 elastcisearch 图像时遇到以下错误 docker compose pull Pulling elasticsearch elasticsearch 2 2 0 Pulling repositor
  • 如何正确解决“弱接收器在 ARC 模式下可能会意外地为空”的问题

    我在 xcode 中打开了一个新标志 并收到警告 弱接收器在 ARC 模式下可能不可预测地为空 这让我很困惑 因为它当然可能为零 我一周前问过这个问题 但没有收到任何答复 但格雷格 帕克在邮件列表上回答了它 所以我重新发布答案 我们添加此警
  • 我删除了 Xcode 中的本地化,然后无法添加任何本地化

    我错误地从项目信息中删除了项目的本地化信息 故事板和相关语言都被删除 我从以前的文件中取回了故事板 但是当我想添加新的本地化时 会弹出一个窗口并要求我 选择文件和参考语言来创建英语本地化 并且根本没有资源文件 如何添加回本地化内容 添加回本
  • 在 Excel VBA 中,如何保存/恢复用户定义的过滤器?

    如何使用 VBA 保存并重新应用当前过滤器 在 Excel 2007 VBA 中 我试图 保存用户在当前工作表上拥有的任何过滤器 清除过滤器 做东西 重新应用保存的过滤器 看一下捕获自动筛选状态 http www mrexcel com f
  • wikidata 获取带有项目标签和值的所有属性

    我的问题是如何从 wikidata 最好是通过 SPARQL 提取在网页上呈现的所有属性及其各自的标签 以Google https www wikidata org wiki Q95维基数据上的条目 对于属性 P414 证券交易所 或 P1
  • 将 VB 转换为 C# - My.Application.Info.DirectoryPath

    以下 VB VB NET VisualBasic 语句的最佳 C csharp 等效项是什么 My Application Info DirectoryPath My Computer Clipboard My Computer Audio
  • 使用图像映射生成器的一个好的替代方案是什么? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一张大图像 我想让图像的某些部分可单击 我还想指定可点击区域的形状 方形 圆形 自定义 在不依赖 Javascript 的情况下 如何
  • Android 上原始文件夹和 SD 卡之间的 MediaPlayer 问题

    我正在制作一个用于使用搜索栏播放歌曲的应用程序 如果我从原始文件夹播放 它可以工作 但如果我从 SD 卡播放歌曲 它会显示空指针异常 private MediaPlayer mediaPlayer mediaPlayer MediaPlay
  • 为什么要为 RESTful API 创建单独的应用程序?

    Yii 2 的指南中说 虽然不是必需的 但建议您开发 RESTful API 作为一个单独的应用程序 与您的 Web 前端不同 后端更方便维护 Source RESTful Web 服务 快速入门 http www yiiframework
  • 执行源代码时忽略导入错误

    我有一个应用程序 它读取 python 中的测试脚本并将其通过网络发送以在远程 python 实例上执行 由于控制程序不需要运行这些脚本 我不想将测试脚本使用的所有模块安装在控制器的 python 环境中 然而 控制器确实需要来自测试脚本的
  • C# 中带有复选框的 TreeView

    我在 C 中有一个带有复选框的树视图 我希望当用户检查一个节点时 自动检查以下级别上的所有节点 有谁知道如何做到这一点 而无需在每次用户检查某个节点时在所有树上运行递归功能 Thanks 该函数返回树视图 public TreeView G
  • SQL 用逗号替换点

    我有以下代码 SELECT cast Listenpreis 1 19 as decimal 29 2 as Listenpreis FROM SL M03KNE dbo ARKALK 我得到这个值 5 59 我尝试将点替换为 komma
  • Qt QPushButton 样式表悬停

    我有以下按钮样式表 QPushButton hover background qlineargradient x1 0 y1 0 x2 0 y2 1 stop 0 0 ffd9aa stop 0 5 ffbb6e stop 0 55 fea
  • 在 PHP 中你使用复数还是单数来命名你的数组? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 当我命名数组类型变量时 我经常遇到一个困境 我使用复数还是单数命名我的数组 例如 假设我有一个名称数组 在 PHP 中我会说 names arr
  • Kubernetes 在 AWS-EBS 上创建 PersistentVolumeClaim 失败

    我使用以下命令设置了一个包含四个 EC2 实例的 Kubernetes 集群kubeadm Kubernetes 集群工作正常 但当我尝试创建PersistentVolumeClaim 首先我创建了一个StorageClass使用以下 YA
  • WPF 数据触发器和故事板

    当视图模型 演示模型繁忙时 我试图触发进度动画 我有一个 IsBusy 属性 并将 ViewModel 设置为 UserControl 的 DataContext 当 IsBusy 属性为 true 时 触发 progressAnimati
  • 暂停 Web Audio API 声音播放

    如何为我的音频创建暂停功能 我的下面的脚本中已经有一个播放函数 http pastebin com uRUQsgbh http pastebin com uRUQsgbh function loadSound url var request
  • 如何正确并行化严重依赖 I/O 的作业

    我正在构建一个必须处理大量数据的控制台应用程序 基本上 应用程序从数据库获取引用 对于每个引用 解析文件的内容并进行一些更改 这些文件是 HTML 文件 该过程正在使用 RegEx 替换进行繁重的工作 查找引用并将其转换为链接 然后结果存储
  • 如何订阅所有进程的PROCESS_STATE_RUNNING事件

    我在用着主管的事件框架 http supervisord org events html订阅由 Supervisor 管理的进程的事件 我的事件监听器 processlistener py 看起来像这样 import sys from su