我如何告诉 Puppet 在关闭时停止服务而不保留它 运行?

How can I tell Puppet to stop a service on shutdown without keeping it running?

上下文:

在 linux(RedHat 系列)系统上,我有一个基于 init-script 的服务,大多数时候是 started/stopped 手动的,一般来说只是 运行针对特定的、不常见的情况。 init 脚本是我无法控制的代码的薄包装。

如果服务在没有运行在其初始化脚本上执行 stop 操作的情况下被终止,它会被不干净地中止并使系统处于需要手动干预才能修复的损坏状态。

当系统 运行 关闭服务时,他们会不干净地杀死它。我可以使用 chkconfig 注册该服务,以便在主机关闭时通过 init 脚本将其关闭;这解决了每个主机的问题。

问题:

我想通过 Puppet 自动配置此服务以在关闭时停止。

我如何告诉 Puppet 使用 chkconfig 注册服务,以便在系统关闭时通过 init 脚本停止该服务,但 不会由 Puppet 管理?

我试过的:

我在 Puppet 中做了一个直接调用 chkconfig 的 hokey exec 语句,但感觉不雅(并且可能会以我没有想到的方式中断)。

我在 Puppet 中尝试使用 noop 标志到 service 类型,但它似乎没有达到预期的效果。

Puppet 没有任何内置支持来配置 运行 级别的服务 运行,也没有任何内置的通用支持 chkconfig。通常,使用 chkconfig 注册服务是服务安装责任;从系统 RPM 安装的服务以这种方式注册。

此外,根据 LSB convention,chkconfig 可识别 initscripts 顶部的结构化注释,以确定默认情况下服务 运行 的 运行 级别。一个正确的初始化脚本只需要在 chkconfig 中注册以设置默认的 运行 级别——特别是,将其设置为在 运行 级别 0 和 6 中停止,这就是你想要的之后。

如果您正在滚动自己的 initscripts 并手动或直接通过 Puppet 部署它们(而不是将它们打包并通过 Yum 安装它们)那么您最好的选择可能是构建一个定义的类型来管理 initscript 和它的注册。你不需要也可能不想要 Service 资源,但是 File 资源来放置正确的文件和 Exec 资源来处理注册听起来是正确的。