我在将 monit 与 Ubuntu/Debian 结合时遇到了一个问题无人值守升级。Monit 监控服务和二进制文件,并根据需要标记更改、重新启动进程等。但是,当提供服务的包更新时(例如,nginx),校验和检查是因为二进制文件已发生更改而触发,例如以下配置:
check process nginx with pidfile /var/run/nginx.pid
group www
group nginx
start program = "/usr/bin/systemctl start nginx.service"
stop program = "/usr/bin/systemctl stop nginx.service"
if 5 restarts with 5 cycles then timeout
depend nginx_bin
check file nginx_bin with path /usr/sbin/nginx
group nginx
if changed checksum then alert
include /etc/monit/templates/rootbin
两者都很有用,但是,无人值守升级有一个令人不快的交互:如果二进制文件发生变化,然后服务停止(出于某种原因),它将不会重新启动,因为 monit 不想重新加载更改后的二进制文件。这是可以理解的,但在这种情况下很烦人,因为无人值守升级是合法且预期的更新源。
是否有某种方法可以在无人值守升级中配置更新后挂钩脚本,我可以使用该脚本触发更新monit reload
校验和,从而防止出现此问题?
答案1
仅一个建议,您可以使用 Monit(检查文件)来监视 /var/log/dpkg.log 文件以获取有关更新的信息,然后在必要时重新加载配置。
另一方面,这会破坏基于校验和的安全测试。
答案2
我在以下帮助下找到了一个干净的解决方案这个答案。
我需要做的就是添加一个/etc/apt/apt.conf.d/99monit
包含以下内容的 apt 配置文件:
DPkg::Post-Invoke {"/usr/bin/monit reload";};
现在,只要软件包更新,monit 就会重新加载。这可能会有点吵,但这种情况并不常见。