svscan 有重试次数设置吗?

svscan 有重试次数设置吗?

我正在使用 svscan 监督一个脚本,该脚本可能会遇到错误并卡在那里。当脚本终止时,svscan 会立即重新启动它,但会立即终止。所以它不断地重新启动它。我似乎没有找到 svscan 的任何设置或配置,例如重试计数或其他内容。您知道类似的事情吗?

答案1

最初的 Bernstein daemontools 没有这方面的机制。服务目录下只有一个run程序和固定的自动重启策略。然而,daemontools 系列的几个成员对此进行了改进,并且具有灵活的通用机制,可用于解决此类情况。

这些都是可以在您的情况下使用的通用机制。我将在这里更详细地讨论 nosh 服务管理。如何将其应用到其他方面应该是相当明显的。

nosh中的自动重启控制

在 nosh 服务管理中,daemontools-encore 使用相同的扩展(相对于 Bernstein 原始)服务状态:停止了,开始,开始了,跑步,失败的, 和停止

服务启动前、处于服务状态时开始状态下,nosh 服务管理器运行该start程序。

当服务终止且仍处于“启动”状态时,nosh 服务管理器运行该restart程序,在失败的状态,以确定是否转换回跑步国家或停止(然后到停止了) 状态。该restart程序以特定于服务的方式为其做出此确定,并且它是明确决定服务是否重新启动“太多次”或以某种其他方式变得无法重新启动的地方。

restart作为命令行参数传递有关主服务进程如何终止的信息(无论是正常退出还是响应信号,以及退出代码或特定信号)。服务经理选择转换回跑步说明restart程序是否可以运行并以成功状态终止,并转换到停止(因此停止了) 另有说明。

restart可以start是您喜欢的任何内容:Perl 程序、shell 脚本、execline 程序、编译的二进制文件等等。它们是 shell 脚本编写中相当简单的练习,带有case...esacif... fi。 nosh-bundles 包中提供了一些用 shell 脚本编写的程序示例restart,可以使用适用于 Debian/Ubuntu适用于 FreeBSD/PC-BSD/DragonFlyBSD/&c。

因此,要确定某个服务是否已重新启动“太多次”,您可以让start程序对计数器进行零初始化(在服务目录中的文件中),并且您的restart程序会递增该计数器,并且仅在计数器达到时才返回成功状态小于某个值。当然,你可以做出包含更多因素和其他因素的决定。

  • 如果服务崩溃或因信号中止,您可能还希望停止自动重新启动,并且只有在它干净地退出或被“干净终止”信号(例如 )干净地终止时才自动重新启动SIGTERM
  • 如果您检测到服务已损坏(以某种特定于服务的方式),以至于在没有管理员干预的情况下无法再次正常启动,您可能希望停止自动重新启动。
  • 比如说,您可能想要引入某种速率限制机制,涉及计算的sleep周期。

进一步阅读

  • 乔纳森·德博因·波拉德 (2015)。守护进程工具家族。常见答案。
  • 乔纳森·德博因·波拉德。service-manager小吃指南

    小吃指南可用为Debian/Ubuntu 软件包FreeBSD/PC-BSD/DragonFlyBSD/&c。包裹,并且service-manager无需任何互联网连接即可在您的计算机上通过以下方式访问该手册:

    • man service-manager
    • xdg-open /usr/local/share/doc/nosh/service-manager.html
  • 布鲁斯·冈特尔. supervise。 daemontools-encore 手册。 §8。
  • 格里特·帕普. runsv。运行手册。 §8。
  • 韦恩·马歇尔(2013)。perpetrate。犯人手册。 §5。
  • 洛朗·贝尔科特. s6-supervise。 s6说明书. Skarnet 软件。

答案2

同意svscan没有灵活性,你可以考虑monit,这是可编写脚本的。

相关内容