如何 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
我有一个系统服务 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