Bash 如何为服务编写包装器脚本
我有一个系统服务,Bash 如何为服务编写包装器脚本,bash,debian,init.d,debian-based,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捕获这些升级。我希望避
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
是否会重新插入到不同的运行级别,然后我会运行两个冲突的副本。您的设置建议您使用sysv init,而不是systemd。如果是这样,请继续阅读。否则就忽略这个答案
通常,在
/etc/rc.d/rc3.d
中会有一个类似于S20foo
的链接。20和3对你来说可能不同。通常,您将创建一个脚本/etc/init.d.pre_foo
,该脚本获取额外配置并将其链接到/etc/rc.d/rc3.d/S19pre_foo
。这将在foo
之前开始pre\u foo
,这听起来是正确的答案,也是一种非常有用的方法。只是想澄清一下,是什么让这项工作能够正常进行的?S19service restart foo
,它将不会重新运行预钩子。是吗?是的,两者都是正确的。还有:请注意,这不是系统性的。