systemd 之前、之后、要求均未按预期工作

systemd 之前、之后、要求均未按预期工作

我在运行 systemd252 的 debian12 系统上有一个 nfs 挂载点,我需要在启动时将其挂载在 zfs 之前但在之后network-online.target,因此我尝试使用,/etc/fstab但它一直在加载之前network-online.target(即使使用 x-systemd.before= 等)。我还尝试放入一个/etc/network/if-up.d/nfs挂载 nfs 的脚本,但 zfs 在那之前加载。

因此,我尝试使用 systemd 创建挂载服务;

# /etc/systemd/system/nfs.mount
[Unit]
Description=nfs
DefaultDependencies=no
Conflicts=umount.target
Before=local-fs.target umount.target zfs-import.target
After=swap.target network-online.target
Requires=network-online.target #it doesn't work with and without this line

[Mount]
What=0.0.0.0:/ # generic info
Where=/nfs
Type=nfs
Options=ro,async,nfsvers=4,nosuid

[Install]
WantedBy=multi-user.target

这似乎是在之前加载的,network-online.target因为它出错并显示:“mount.nfs:网络无法访问”,我也尝试过创建多个其他服务,但之前、之后和需要似乎都不起作用。我该如何按顺序加载网络、nfs、zfs?

编辑:似乎network-online.target报告到达得太早了,nfs.mount确实在之后就开始了,这意味着“之后=”有效。我尝试添加延迟,ExecStartPre=/usr/bin/sleep 10但这会延迟整整 2 分钟。

编辑2:我通过改变服务修复了这个问题;

# /etc/systemd/system/mount-nfs.service
[Unit]
Description=Mount nfs after network but before docker
DefaultDependencies=no
Before=docker.service
After=network-online.target remote-fs.target
Wants=network-online.target

[Service]
Type=oneshot
RemainAfterExit=no
ExecStartPre=/usr/bin/sleep 15
ExecStart=/usr/bin/mount 0.0.0.0:/ /nfs
ExecStart=/usr/sbin/zfs mount -a

[Install]
WantedBy=multi-user.target

添加after=remote-fs.target原因这篇博文wants=network-online.target因为本文档,并替换before=zfs-import.target为仅安装zfs mount -a

所以最后,主要帖子标题得到了解决。(我没有发布我自己问题的答案,因为我从技术上解决了这个问题,而不是完全修复它)

相关内容