我有几个带有默认配置的 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.service
as start program
inmonitrc
和 same for stop
,您可以简单地使用 monit withmonit stop apache
来“全包”;)