nfs – Systemd:在另一个单元真正启动后启动一个单元

前端之家收集整理的这篇文章主要介绍了nfs – Systemd:在另一个单元真正启动后启动一个单元前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的特殊情况下,我想在所有glusterfs完全启动后启动remote-fs单元.

我的systemd文件

glusterfs目标:

node04:/usr/lib/systemd/system # cat glusterfsd.service 
[Unit]
Description=GlusterFS brick processes (stopping only)
After=network.target glusterd.service

[Service]
Type=oneshot
ExecStart=/bin/true
RemainAfterExit=yes
ExecStop=/bin/sh -c "/bin/killall --wait glusterfsd || /bin/true"
ExecReload=/bin/sh -c "/bin/killall -HUP glusterfsd || /bin/true"

[Install]
WantedBy=multi-user.target

remote-fs目标:

node04:/usr/lib/systemd/system # cat remote-fs.target 
[Unit]
Description=Remote File Systems
Documentation=man:systemd.special(7)
Requires=glusterfsd.service
After=glusterfsd.service remote-fs-pre.target
DefaultDependencies=no
Conflicts=shutdown.target

[Install]
WantedBy=multi-user.target

好的,所有Gluster守护进程都开始成功,我想通过NFS挂载Gluster文件系统,但Gluster的NFS共享在glusterfs.service启动后没有立即准备就绪,但几秒钟之后,所以通常remote-fs无法挂载它甚至关于Requires和指令后.

我们来看看日志:

Apr 14 16:16:22 node04 systemd[1]: Started GlusterFS,a clustered file-system server.
Apr 14 16:16:22 node04 systemd[1]: Starting GlusterFS brick processes (stopping only)...
Apr 14 16:16:22 node04 systemd[1]: Starting Network is Online.
Apr 14 16:16:22 node04 systemd[1]: Reached target Network is Online.
Apr 14 16:16:22 node04 systemd[1]: Mounting /stor...

这里一切正常,远程文件系统(/ stor)似乎是在glusterfs启动后挂载,因为它意味着要根据单元文件…但接下来的行是:

//...skipped.....
Apr 14 16:16:22 node04 systemd[1]: Started GlusterFS brick processes (stopping only).

什么? GlusterFS只为这一刻准备好了!然后我们看到:

//...skipped.....
Apr 14 16:16:23 node04 mount[2960]: mount.nfs: mounting node04:/stor Failed,reason given by server: No such file or directory
Apr 14 16:16:23 node04 systemd[1]: stor.mount mount process exited,code=exited status=32
Apr 14 16:16:23 node04 systemd[1]: Failed to mount /stor.
Apr 14 16:16:23 node04 systemd[1]: Dependency Failed for Remote File Systems.
Apr 14 16:16:23 node04 systemd[1]: Unit stor.mount entered Failed state.

安装失败,因为当systemd尝试装入存储时NFS服务器未就绪.

由于systemd启动过程的非确定性,有时(大约10个引导中的1个)在启动时安装此文件系统成功.

如果onboot mount不成功,我可以登录到服务器并手动挂载/ stor目录,因此Gluster的NFS服务似乎工作正常.

那么如何在glusterfsd之后启动remote-fs,即在启动GlusterFS砖进程行之后出现在日志中?

remote-fs似乎是最后一个目标之一,所以我无法在另一个“解决方法”目标之后启动它,而这个目标实际上并不是remote-fs所要求的.

解决方法

您可以通过以下命令分析systemd启动顺序.使用支持Web浏览器的SVG查看输出文件.
systemd-analyze plot > test.svg

该绘图将为您提供上次启动的时间统计信息,这将为您提供更明确的问题观点.

我通过在/etc/rc.local中添加mount命令解决了我的NFS挂载问题.但是我不确定,它是否适用于glusterd集成,值得尝试快速修复.为了使systemd运行rc.local你应该满足以下条件:

# grep Condition /usr/lib/systemd/system/rc-local.service
ConditionFileIsExecutable=/etc/rc.d/rc.local

猜你在找的Linux相关文章