如何 shell 编写服务包装器的脚本

How to shell script a wrapper for a service

我有一个系统服务 foo 是通过 /usr/sbin/service restart foo 启动和停止的。它又似乎由 shell 脚本 /etc/init.d/foo

控制

如何创建 "pre-start" 挂钩,以便在此服务启动之前 运行 额外的 shell 脚本?在这种情况下,预启动挂钩是额外的配置,必须从云提供商元数据目录中获取,然后插入 foo 正常启动所需的配置文件中。

我考虑过直接修改/etc/init.d/foo,这样可行。但这会使预期的频繁补丁级别升级变得复杂,我将在 apt-get upgrade 之前抓住它。我想避免需要重新建立挂钩的解决方案。

第二个选项是我可以创建一个 fooWrapper 服务,从所有 运行 级别删除 foo,然后只删除 start/stop fooWrapper。该脚本的实现只是我的秘密武器 + 调用 /etc/init.d/foo。问题又是软件包升级,foo 是否会重新将自己插入到各个 运行 级别中,然后我最终会 运行ning 两个冲突的副本。

您的设置建议您使用 sysv init 而不是 systemd。如果是这种情况,请继续阅读。否则忽略此答案。

一般来说,您会在 /etc/rc.d/rc3.d 中有一个 link,例如 S20foo。 20 和 3 对您来说可能不同。通常,您会创建一个脚本 /etc/init.d.pre_foo 来获取您的额外配置并将其 link 到 /etc/rc.d/rc3.d/S19pre_foo。这将在 foo.

之前开始 pre_foo