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

相关文章

/etc/sysctl.conf这个目录主要是配置一些系统信息,/etc/sys...
1.作用 useradd或adduser命令用来建立用户帐号和创建用户的起...
它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅...
不管是我们在安装软件还是监测软件的使用性能,我们都要随时...
装好Tomcat7后,发现除了本机能访问外界访问不了,岂有此理。...
修改防火墙配置需要修改 /etc/sysconfig/iptables 这个文件,...