我认为这是一个相当简单的问题,但我似乎无法找到解决办法。
我在 Ubuntu 18.04.3 上,并在启动时使用 mongo-data 正确安装 zfs 卷,配置如下:/etc/systemd/system/multi-user.target.wants。
[Unit]
Description=ZFS startup target
[Install]
WantedBy=multi-user.target
问题是,这种情况发生在 mongod 服务启动之后,导致 mongod 失败。
[Unit]
Description=MongoDB Database Server
Documentation=https://docs.mongodb.org/manual
After=network.target
[Service]
User=root
Group=root
EnvironmentFile=-/etc/default/mongod
ExecStart=/usr/bin/mongod --config /etc/mongod.conf
PIDFile=/var/run/mongodb/mongod.pid
# file size
LimitFSIZE=infinity
# cpu time
LimitCPU=infinity
# virtual memory size
LimitAS=infinity
# open files
LimitNOFILE=64000
# processes/threads
LimitNPROC=64000
# locked memory
LimitMEMLOCK=infinity
# total threads (user+kernel)
TasksMax=infinity
TasksAccounting=false
Restart=always
# Recommended limits for for mongod as specified in
# http://docs.mongodb.org/manual/reference/ulimit/#recommended-settings
[Install]
WantedBy=multi-user.target
我阅读了有关WantedBy
、Requires
和After
指令的内容,但我不确定我是否足够了解它们,可以操作它们。
答案1
我在另一项服务中遇到了非常类似的问题,该服务想要在其文件(位于 ZFS 数据集上)可用之前启动。
我使用一个非常简单的 systemd 覆盖解决了这个问题。你也可以这样做:
# cat /etc/systemd/system/mongod.service.d/zfs.conf
[Unit]
Requires=zfs.target
After=zfs.target
一段时间后sudo systemctl daemon-reload
(当然是重启后)该功能就会生效。尽情享用吧!
请记住不要编辑软件包附带的 systemd 单元,因为更新软件包时您的更改不会被保留。请使用覆盖文件(例如上述文件)。
答案2
您需要使用 RequiresMountsFor;请参阅
man systemd.directives
例如,选项将类似于 RequiresMountsFor=[mountpoint]
RequiresMountsFor=/zfsmount