我有一个系统服务,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
是否会将自身重新插入到各种运行级别中,然后我最终会运行两个冲突的副本。
答案 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
开始。