FQDN 名称解析失败时强制 NFS/CIFS 重试

FQDN 名称解析失败时强制 NFS/CIFS 重试

我最初尝试将其发布在 Ubuntu 论坛上,但我希望在这里能有更广泛的受众。

我有一个设置,在我的 fstab 中安装 NFS/CIFS,然后由服务使用(在我的例子中,服务由 docker 容器呈现)。

一般来说,一切都很好。当我的 systemd 服务启动时,它确保正确加载挂载点(我的单元是用 定义的RequiresMountsFor=)。我的挂载点是/etc/fstab使用 FQDN 名称定义的,这些名称在我的网络内部解析:

nas.home.ca:/mnt/HomeNAS                        /mnt/nas nfs ro 0 0
nas.home.ca:/mnt/HomeNAS/VM/Config/Alma-Docker1 /mnt/docker nfs rw 0 0
//nas.home.ca/Restore                          /mnt/restore cifs credentials=/etc/fstab.credentials.backup,file_mode=0777,dir_mode=02777 0 0

如果我的内部名称服务器在服务启动时离线,就会出现问题。如果挂载尚不存在,则挂载会快速失败,并出现 FQDN 无法解析的错误,并且 systemd 不会尝试重新挂载它们。因此,我的服务也无法启动,并且由于依赖项失败而不会尝试重新启动。

我查看了x.systemdfstab 的可用选项,但没有找到任何可以将安装单元配置为在失败时重新启动/重试的内容。

[eric@dockervm2 system]$ sudo systemctl start mnt-nas.mount
Job failed. See "journalctl -xe" for details.
[eric@dockervm2 system]$ sudo systemctl start mnt-restore.mount
Job failed. See "journalctl -xe" for details.
[eric@dockervm2 system]$ sudo systemctl start mnt-docker.mount
Job failed. See "journalctl -xe" for details.
[eric@dockervm2 system]$ sudo journalctl -xe

因此,当我尝试启动服务时,我收到以下错误消息:

[eric@dockervm2 system]$ sudo systemctl start backup-docker-compose
A dependency job for backup-docker-compose.service failed. See 'journalctl -xe' for details.

如何设置我的挂载点以便他们重试?我意识到问题是我的名称服务器处于离线状态,我希望它尝试每 XXX 秒重新启动一次,直到我的名称服务器重新启动并运行。我知道我可以通过在 fstab 中使用 IP 而不是 fqdn(或 /etc/hosts 文件中的本地条目)来规避,但这有点违背了目的。

有没有办法在 systemd 中本地配置它以继续重试?

答案1

很多人都问过,答案似乎都没有。

https://github.com/systemd/systemd/issues/4468

我通过忽略 systemd 挂载并将挂载实现为服务来解决了这个问题。例如:

[root@adele ~]# cat /etc/systemd/system/srv-music.service 
[Unit]
Description=Media devices
After=network.target

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/usr/bin/mount -t nfs4 -o vers=4,minorversion=1,owner,ro darknight.localdomain6:/Media /srv/music
ExecStop=/usr/bin/umount /srv/music
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

上面的关键字是RestartRestartSec

相关内容