我多年来一直使用
monit
来监控我的 Rails 应用程序。它对我来说非常有效。
目前,当我尝试在最新的
Ubuntu LTS (24.04.1)
上设置相同的配置时,我遇到了一个问题,因为 monit 的 systemd 单元文件使用 ProtectSystem=strict
,这使得整个文件系统几乎都是 ReadOnly
。它还在配置中包含这一行ReadWritePaths=/run/ /var/lib/monit/ /var/log/
,仅制作这些路径ReadWrite
。当我通过 monit
启动时,这些限制将由我的 Rails 应用程序进程继承。
这会导致
bundler
缓存出现问题,我已将其设置为 /home/ubuntu/.bundles/pw_bundle
。 bundler
需要对此位置的写入权限。我看到有两种选择可以解决这个问题:
systemd
的 monit
单元文件,以允许更多目录可写 - 我想避免使用 monit
,它的单元文件作为 apt
软件包安装的一部分。我不想干预它,以避免升级过程中出现问题。/var/log
作为我的 bundle
的位置 - 这听起来不太正确。这些是唯一的选择还是我错过了什么?这里建议的方法是什么?
使用记录的方法扩展 systemd 单元:运行
systemctl edit monit
,或手动创建 /etc/systemd/system/monit.service.d/<whatever>.conf
,并在该文件中定义其他单元设置:
[服务] ReadWritePaths=/home/foo ReadWritePaths=/var/lib/bar /home/baz
…如果您手动创建文件,请运行
systemctl daemon-reload
。
还要考虑让 monit 直接生成您的应用程序实际上是否是一个好主意,因为操作系统已经内置了一个服务管理器。为应用程序创建一个自定义的 systemd .service 可能更有用(因为它本身就是例如,具有崩溃时重新启动功能)并且仅让 monit 使用
systemctl --quiet is-active myapp.service
检查它。