如何shell脚本服务的包装器

时间:2018-02-02 19:08:59

标签: bash debian init.d debian-based

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

控制

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

我考虑直接修改/etc/init.d/foo,这可行。但这会使预期的频繁补丁级别升级复杂化,我将通过apt-get upgrade捕获这些升级。我想避免一个需要重新建立钩子的解决方案。

第二个选项是我可以创建fooWrapper服务,从所有运行级别删除foo,然后启动/停止fooWrapper。该脚本的实现只是我的秘密酱+调用/etc/init.d/foo。麻烦就是包升级,无论foo是否会将自身重新插入到各种运行级别中,然后我最终会运行两个冲突的副本。

1 个答案:

答案 0 :(得分:1)

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

通常,S20foo中会有/etc/rc.d/rc3.d之类的链接。 20和3可能会有所不同。通常,您可以创建一个脚本/etc/init.d.pre_foo来获取额外的配置并将其链接到/etc/rc.d/rc3.d/S19pre_foo。这将在pre_foo之前foo开始。