Systemd http 健康检查

2024-02-22

我在 Redhat 7.1 上有一个服务,我使用 systemctl 启动、停止、重新启动和状态来控制。有一次,systemctl 状态返回 active,但服务“背后”的应用程序响应的 http 代码与 200 不同。

我知道我可以使用 Monit 或 Nagios 来检查这一点并重新启动 systemctl - 但我想知道使用 systemd 时是否默认存在某些东西,这样我就不需要安装其他工具。

我首选的解决方案是,如果 http 返回代码与 200 不同,则完全自动重新启动我的服务,而无需使用 systemd 本身以外的其他工具 - (也许可以通知 Hipchat 房间或发送电子邮件...)

我尝试过用谷歌搜索这个话题 - 没有运气。请帮忙 :-)


简短的回答

systemd 有一个本机(基于套接字)健康检查方法,但它不是基于 HTTP 的。不过,您可以编写一个垫片来通过 HTTP 轮询状态并将其转发到本机机制。


长答案

systemd 世界中正确的事情是使用sd_notify当您的应用程序完全可用时,套接字机制通知 init 系统。使用Type=notify以便您的服务启用此功能。

您可以使用以下命令直接写入此套接字sd_notify() https://www.freedesktop.org/software/systemd/man/sd_notify.html致电,或者您可以检查NOTIFY_SOCKET环境变量来获取名称并编写您自己的代码READY=1当应用程序返回 200 秒时到该套接字。

如果您想将其推迟到一个单独的进程,该进程通过 HTTP 轮询您的进程,然后写入套接字,您可以这样做 - 确保NotifyAccess适当设置(默认情况下,仅允许服务的主进程写入套接字)。


由于您有兴趣检测应用程序在完全初始化后失败的情况并触发重新启动,因此sd_notify套接字也适合这种情况:

Send WATCHDOG_USEC=...设置成功测试之间允许的时间量,然后WATCHDOG=1每当您成功进行自检时;只要在配置的时间内没有看到成功的测试,您的服务就会重新启动。

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

Systemd http 健康检查 的相关文章

  • 在 shell 脚本中查找和替换

    是否可以使用 shell 在文件中搜索然后替换值 当我安装服务时 我希望能够在配置文件中搜索变量 然后在该值中替换 插入我自己的设置 当然 您可以使用 sed 或 awk 来完成此操作 sed 示例 sed i s Andrew James
  • 无关的库链接

    我有一个可能有点愚蠢的问题 因为我很确定我可能已经知道答案了 假设你有静态库A 动态共享库B和你的linux下的程序C 假设库 A 调用库 B 中的函数 并且您的程序调用库 A 中的函数 现在假设 C 在 A 中调用的所有函数都不使用 B
  • 如何确保 numpy BLAS 库可用作动态加载库?

    The theano安装文档 http www deeplearning net software theano install html troubleshooting make sure you have a blas library指
  • 确保 config.h 包含一次

    我有一个库项目 正在使用 Linux 中的 autotools 套件移植到该项目 我对自动工具很陌生 本周 我已经了解了其操作的基础知识 我有一个关于如何保留内容的问题config h免遭重新定义 我惊讶地发现生成的config h文件也没
  • 如何从linux命令行运行.exe可执行文件? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在 Windows 中有一个 abc exe 可执行文件 我可以使用 DOS 命令提示来执行此应用程序 并为其提供一些运行时变量 我想从
  • 如何成功使用RDAP协议代替whois

    我对新的 RDAP 协议有点困惑 也不知道何时进一步追求它有意义 在我看来 每个人都同意它是 whois 的继承者 但他们的数据库似乎是空的 在 ubuntu 上我尝试了 rdapper nicinfo 甚至他们的 RESTful API
  • 标准头文件中的 C 编译器错误 - 未定义的 C++ 定义

    我正在尝试编译 C 程序 但收到许多错误 这些错误是在标准 C 头文件 inttypes h stdio h stat h 等 中遇到的 错误的来源是以下未定义的常量 BEGIN DECLS END DECLS BEGIN NAMESPAC
  • 在Linux中断上下文中运行用户线程

    我正在编写一些定制的应用程序 并允许更改 Linux 内核中的中断处理程序代码 我有一个用户线程正在等待中断发生 如果发生中断 那么我要做的第一件事就是执行该用户线程 有什么办法让它发挥作用吗 Thanks 创建一个字符设备 这就是内核所做
  • 如何以编程方式从Linux中的进程名称获取进程ID

    在我的项目中 我们使用 ACE 自适应通信环境 中间件来编写可在 Windows 和 Linux 上运行的独立于操作系统的代码 要求是从进程名称中获取进程 ID 由于 ACE 不支持这一点 因此我们必须使用特定于平台的宏来分离 Window
  • C 程序从连接到系统的 USB 设备读取数据

    我正在尝试从连接到系统 USB 端口的 USB 设备 例如随身碟 获取数据 在这里 我可以打开设备文件并读取一些随机原始数据 但我想获取像 minicom teraterm 这样的数据 请让我知道我可以使用哪些方法和库来成功完成此操作以及如
  • 无需 cron 在后台发送邮件

    我想知道是否有一种方法可以运行 PHP 循环 以便在后台向订阅者发送几百封电子邮件 我的目标是格式化新闻通讯 单击发送 然后关闭浏览器或更改页面 当然 发送电子邮件的实际过程将在后台运行 不会因浏览器关闭而中断 我知道这可以通过 cron
  • Linux 桌面快捷方式和安装图标

    我需要添加什么到我的 spec文件来创建桌面快捷方式并在安装过程中为快捷方式分配一个图标 rpm 如果需要脚本 一个示例将非常有帮助 您在 Linux 下使用 desktop 文件作为图标 图标放置的位置取决于您使用的发行版和桌面环境 由于
  • Linux shell 脚本中的 while 循环超时

    这工作正常 无限循环 while TRUE do printf done 我在尝试着timeout this while loop与timeout命令 所有这些都不起作用 timeout 5 while TRUE do printf don
  • 如何使用 sed 仅删除双空行?

    我找到了这个问题和答案 https stackoverflow com questions 4651591 howto use sed to remove only triple empty lines关于如何删除三重空行 但是 我只需要对
  • 在主目录中安装库

    在 Linux Ubuntu 中 我尝试运行一个工具 但它显示错误 库丢失 我无权在系统中安装任何内容 或者根本无法从我的用户帐户执行 sudo 是否可以在我的主目录 没有 sudo 中安装缺少的库 在我的例子中为 libstdc so 6
  • SONAR - 使用 Cobertura 测量代码覆盖率

    我正在使用声纳来测量代码质量 我不知道的一件事是使用 Cobertura 测量代码覆盖率的步骤 我按照以下步骤操作http cobertura sourceforge net anttaskreference html http cober
  • 如何更改 Ubuntu 14.04 上的 php-cli 版本?

    我是 Linux 新手 在篡改时破坏了一些 php 设置 如果我执行一个包含以下内容的 php 脚本 phpinfo 它显示 php 版本为 5 6 但通过命令行 如果我运行php v它返回 7 0 版本 我想让两个版本匹配 我怎样才能修复
  • 并行运行 make 时出错

    考虑以下制作 all a b a echo a exit 1 b echo b start sleep 1 echo b end 当运行它时make j2我收到以下输出 echo a echo b start a exit 1 b star
  • 在 Linux 中禁用历史记录 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 要在 Linux 环境中禁用历史记录 我执行了以下命令 export HISTFILESIZE 0 export HISTSIZE 0 u
  • QFileDialog::getSaveFileName 和默认的 selectedFilter

    我有 getSaveFileName 和一些过滤器 我希望当用户打开 保存 对话框时选择其中之一 Qt 文档说明如下 可以通过将 selectedFilter 设置为所需的值来选择默认过滤器 我尝试以下变体 QString selFilte

随机推荐

  • C++中make_shared和普通shared_ptr的区别

    std shared ptr p1 std make shared foo std shared ptr p2 new Object foo 许多谷歌和 stackoverflow 帖子都在这方面 但我无法理解为什么make shared比
  • 在 C 中将可变长度数组声明为全局变量

    如何将可变长度数组声明为全局变量 当在扫描长度之前在函数中声明可变长度数组时 它会编译但不会运行 它给出了分段错误 当相同的声明语句移动到扫描语句下方时 它运行良好 如果我们想要一个全局可用于所有函数的可变长度数组 我们该怎么做呢 这里的问
  • 将 XAML PathGeometry 转换为 WPF PathGeometry

    我想要由 LineSegment 组成的 PathGeometry 所以 我使用第一个代码 但它是错误的 PathGeometry temp PathGeometry Geometry Parse
  • 使用 textFileStream 的 Python Spark Streaming 示例不起作用。为什么?

    我使用spark 1 3 1和Python 2 7 这是我第一次体验 Spark Streaming 我尝试使用 Spark Streaming 从文件中读取数据的代码示例 这是示例的链接 https github com apache s
  • pandas 系列的 groupby 不起作用

    我无法对 pandas Series 对象进行 groupby 数据帧很好 但我似乎无法对系列进行分组 有人能够让它发挥作用吗 gt gt gt import pandas as pd gt gt gt a pd Series 1 2 3
  • Go 中任意精度常量的目的是什么?

    Go 具有任意大小和精度的无类型精确数值常量 这spec requires https golang org ref spec Constants所有编译器都支持至少 256 位的整数 以及至少 272 位的浮点数 尾数为 256 位 指数
  • Feign Hystrix 回退不起作用

    我有以下 FeignClient FeignClient name FooMS fallback CustomerFeign CustomerFeignImpl class public interface CustomerFeign Re
  • Rails 3 UTF-8 查询字符串显示在 URL 中?

    我的主页 上有一个搜索查询表单 当我提交此搜索表单时 我希望最终到达 search query foo 但是 现在我得到 search utf8 E2 9C 93 query foo 那个 utf8 参数在那里做什么 我怎样才能摆脱它 Th
  • 为什么我所有的看跌期权都返回 =>nil?

    我知道这似乎是一个非常简单的问题 但我的看跌期权不断生成 gt nil 这真的让我很困扰 我寻找答案但找不到答案 谢谢 把 眨眼 4 眨眼眨眼眨眼 gt 无 因为那是返回值puts put obj nil 将给定对象写入 ios 与 IO
  • 使用 Nhibernate 在子查询中仅选择不带 group by 属性的 max 子句

    我有这样的 SQL 查询 select from dbo table1 where Id in select max id as id from dbo table1 group by prop1 prop2 prop3 我想创建 NHib
  • Runtime.getRuntime().exec(String[]) 安全性

    我正在使用 Runtime getRuntime exec String 来运行进程 其中 String 数组的某些元素是由用户定义的 这安全吗 或者它允许将代码注入终端吗 如果不安全 我该怎么做才能避免代码注入 它必须是平台独立的 正如我
  • 如何在迭代时向列表添加值[重复]

    这个问题在这里已经有答案了 我有一个这样的场景 List
  • Android-R.java 文件未找到

    在处理 android 项目时 我被 R java 文件困住了 即使我清理项目 项目 gt clean 也找不到该文件 但该文件仍然找不到 即使我创建一个相同的新项目出现问题 我需要做什么 我期待有价值的答复 以便我可以克服这个问题 R j
  • 不知道如何导出 Objective-C 类。 i386 体系结构的未定义符号

    我正在尝试在 OSX 上的 GTK 上做一些工作 但遇到了一些麻烦 因为说实话 我对 Objective C 不太熟悉 我有足够的编程经验 可以很快掌握基本语法 并且可以在文档中查找我需要的内容 但我遇到的问题与链接库并将类暴露给我链接的程
  • 使用 Linkify.addLinks 与 Html.fromHtml 结合使用

    我有一个TextView通过调用以下命令获取其数据集 tv setText Html fromHtml myText 字符串myText包含部分格式化的 html 数据 例如 它可能有字体标签 但没有任何使用格式设置的 url 链接 a h
  • 通过 MsBuildProj 文件转换多个项目的多个配置文件

    我正在尝试根据模式 所有形式的文件 在文件列表上运行多个命令 config在给定目录的子目录下 如下所示
  • Node.js docker 容器未更新以适应卷的变化

    我正在尝试在我的 Windows 计算机上托管一个开发环境 该计算机托管前端和后端容器 到目前为止 我只在后端工作 所有文件都位于 C 盘上 通过 Docker Desktop 共享 我有以下 docker compose 文件和 Dock
  • 通过 Response.ContentType、Response.End 输出文件时如何显示进度状态/旋转器?

    我有一个网络表单下载链接按钮 在按钮的点击事件上我正在获取数据 然后生成 XLSX 文件供下载 在文件生成过程中 响应 Clear 叫做 响应内容类型被设定并最终响应 End 叫做 我需要显示微调器 gif在那次操作期间 文件生成并弹出文件
  • 角度区域

    什么是区域 Angular ngZone 与 zone js 有何不同 什么时候应该使用它们 有人可以帮助提供使用 ngZone 的实际示例吗 我在这里浏览了角度文档 但是我无法完全理解 https angular io api core
  • Systemd http 健康检查

    我在 Redhat 7 1 上有一个服务 我使用 systemctl 启动 停止 重新启动和状态来控制 有一次 systemctl 状态返回 active 但服务 背后 的应用程序响应的 http 代码与 200 不同 我知道我可以使用 M