You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Slurmd的Systemd服务等待NFS挂载完成

解决Slurmd守护进程等待NFS挂载完成的问题

我之前也碰到过类似的NFS挂载延迟导致服务启动报错的情况,结合你的slurmd配置和问题场景,给你几个切实可行的解决方案:

方案1:使用RequiresMountsFor强制等待挂载点就绪

单纯依赖After=nfs-client.target有时候不够,因为nfs-client服务启动完成不代表具体的/nfs挂载点已经挂载成功。RequiresMountsFor是systemd专门用来确保指定挂载点已经完成挂载的参数,它会让slurmd服务一直等到/nfs挂载完成后才启动。

修改你的slurmd.service的[Unit]段:

[Unit]
Description=Slurm node daemon
After=network.target nfs-client.target
RequiresMountsFor=/nfs
ConditionPathExists=/etc/slurm/slurm.conf
ConditionPathExists=/nfs/slurm
TimeoutStartSec=120  # 给足挂载时间,设置为120秒足够覆盖你的1分钟需求
  • RequiresMountsFor=/nfs:强制systemd等待/nfs挂载点完成挂载,否则slurmd不会启动
  • TimeoutStartSec=120:延长启动超时时间,避免因为挂载慢被systemd判定启动失败

方案2:添加预启动脚本等待目标目录存在

如果挂载完成后/nfs/slurm目录还需要一点时间才能就绪(比如NFS端的目录权限同步延迟),可以在启动slurmd前添加一个循环检查的预启动命令:

修改slurmd.service的[Service]段,增加ExecStartPre:

[Service]
Type=forking
EnvironmentFile=-/etc/sysconfig/slurmd
# 预启动脚本:每隔5秒检查一次目录,直到存在或超时
ExecStartPre=/bin/bash -c 'while [ ! -d "/nfs/slurm" ]; do sleep 5; echo "Waiting for /nfs/slurm to be ready..."; done'
ExecStart=/usr/sbin/slurmd $SLURMD_OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
PIDFile=/var/run/slurmd.pid
KillMode=process
LimitNOFILE=51200
LimitMEMLOCK=infinity
LimitSTACK=infinity
TimeoutStartSec=120  # 配合预启动脚本,设置足够的超时时间

这个脚本会在启动slurmd之前持续检查/nfs/slurm目录,直到它存在才会继续执行启动命令。

方案3:确保NFS挂载配置包含_netdev选项

检查你的/etc/fstab里的NFS挂载行,确保添加了_netdev选项,这个选项告诉systemd该挂载依赖网络,会让systemd在网络完全就绪后再处理挂载请求,避免提前挂载失败:

示例fstab配置行:

your-nfs-server:/exported/path /nfs nfs defaults,_netdev 0 0

这个选项能帮助systemd更合理地安排挂载和服务启动的顺序,减少挂载延迟导致的问题。

最后生效步骤

修改完配置后,执行以下命令重新加载systemd配置并重启服务:

sudo systemctl daemon-reload
sudo systemctl restart slurmd.service

你可以测试一下重启系统,看看slurmd是否还会出现找不到目录的错误。

内容的提问来源于stack exchange,提问作者rori

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:51:10