debian jessie 中的 systemd 插入顺序

debian jessie 中的 systemd 插入顺序

我有几个带有默认配置的 debian 8 服务器。

他们已经安装了 apache2,我想添加 monit (https://mmonit.com/monit/) 以获得更多可用性。

为了管理操作员驱动的 apache 停止和启动,我想添加 monit监视器取消监控操作到 apache systemd 单元。我考虑在 systemd apache 配置中发送这个插入文件(/etc/systemd/system/apache2.service.d/文件夹):

[Service]
ExecStartPost=-/usr/bin/monit monitor apache2
ExecStop=-/usr/bin/monit unmonitor apache2

ExecStartPost 命令运行良好。

不幸的是,我对 ExecStop 命令遇到了一些问题,因为它是在服务实际停止后执行的。

我发现在/运行/systemd/generator.late/apache2.service(systemd-sysv-generator 自动生成的文件)。当然有多个 ExecStop 命令也没有问题,这里的问题是顺序:

root@debianjessie:~# systemctl show apache2 | grep ^ExecStop
ExecStop={ path=/etc/init.d/apache2 ; argv[]=/etc/init.d/apache2 stop ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }
ExecStop={ path=/usr/bin/monit ; argv[]=/usr/bin/monit unmonitor apache2 ; ignore_errors=yes ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }

我找到了一种解决方法,即在我的插入文件里重新定义所有 ExecStop 序列:

[Service]
ExecStartPost=-/usr/bin/monit monitor apache2
ExecStop=
ExecStop=-/usr/bin/monit unmonitor apache2
ExecStop=/etc/init.d/apache2 stop

但我认为这不是一个非常“干净”的解决方案。

阅读这里插入式/ETC/应该是具有最高优先级的,所以我不明白为什么我的插入式 ExecStop 操作最后执行。

我是否遗漏了什么?

提前致谢。S.

答案1

为什么不通过使用 monit 来启动/停止 apache 来扭转局面(不修改任何 systemd 单元!)?

如果您使用/bin/systemctl start apache2.serviceas start programinmonitrc和 same for stop,您可以简单地使用 monit withmonit stop apache来“全包”;)

相关内容