无人值守升级后触发 monit 重新加载

无人值守升级后触发 monit 重新加载

我在将 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 就会重新加载。这可能会有点吵,但这种情况并不常见。

相关内容