当在 systemd 单元文件中使用 ProtectSystem=strict 时,使用 monit 服务监控 Rails 应用程序

问题描述 投票:0回答:1

我多年来一直使用

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
需要对此位置的写入权限。我看到有两种选择可以解决这个问题:

  1. 编辑
    systemd
    monit
    单元文件,以允许更多目录可写 - 我想避免使用
    monit
    ,它的单元文件作为
    apt
    软件包安装的一部分。我不想干预它,以避免升级过程中出现问题。
  2. 使用
    /var/log
    作为我的
    bundle
    的位置 - 这听起来不太正确。

这些是唯一的选择还是我错过了什么?这里建议的方法是什么?

ruby-on-rails systemd monit
1个回答
0
投票

使用记录的方法扩展 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
检查它。

© www.soinside.com 2019 - 2024. All rights reserved.