HCRM博客

CentOS服务启动顺序配置,After与WantedBy参数详解

CentOS服务启动顺序调整,After与WantedBy参数实例

机器重启后,MySQL总赶在网络还没就绪就抢着启动,结果卡半分钟;NFS挂载又比rpcbind早,导致一堆失败红字。把服务顺序捋顺,是每台CentOS躲不掉的体力活。Systemd 用 After、Before、WantedBy 三条指令就能让单元文件乖乖排队,下面把踩坑过程直接摊开,复制粘贴就能用。

CentOS服务启动顺序配置,After与WantedBy参数详解-图1

Systemd 启动队列怎么排

Systemd 不看你脚本名字,也不猜依赖,它只认单元文件里写的 After、Before、Wants、Requires、WantedBy。After 决定“我必须在谁之后”,Before 决定“我必须在谁之前”,WantedBy 决定“我被谁拉起来”。写错一条,服务就插队,日志里给你颜色看。

After 参数实战:让 MariaDB 等网络

场景:MariaDB 启动时要向 DNS 解析主机名,网络没好就报 “Can't resolve address”。

步骤:

1 cp /usr/lib/systemd/system/mariadb.service /etc/systemd/system/mariadb.service

CentOS服务启动顺序配置,After与WantedBy参数详解-图2

2 编辑 Unit 段,加一行:

After=network-online.target

3 systemctl daemon-reload

4 reboot 验证,MariaDB 首次监听端口时间比原来晚 3 秒,但不再重试 30 秒。

要点:network-online.target 由 NetworkManager-wait-online.service 通知,真正等到 IP 地址落盘才放行。

Before 参数实战:让自定义脚本抢在 nginx 前跑

CentOS服务启动顺序配置,After与WantedBy参数详解-图3

场景:容器里生成的 upstream.conf 必须比 nginx 先到位。

1 写 /etc/systemd/system/pre-nginx.service

[Unit]

Description=Generate upstream.conf

Before=nginx.service

[Service]

Type=oneshot

ExecStart=/usr/local/bin/gen_upstream.sh

RemainAfterExit=yes

[Install]

WantedBy=multi-user.target

2 systemctl enable pre-nginx.service

3 重启后,nginx 启动前必然已执行完脚本,无缺配置。

WantedBy 参数实战:把服务挂到图形界面之后

场景:某商业软件只许在图形登录后运行,不能提前。

1 在单元文件 Install 段写:

WantedBy=graphical.target

2 systemctl disable yourapp.service 去掉多余链接

3 systemctl enable yourapp.service 重新生成 /etc/systemd/system/graphical.target.wants/yourapp.service

4 结果:只有系统进入图形界面才拉起来,multi-user.target 不会误触发。

混合范例:NFS 客户端正确等待 rpcbind 和网络

默认 /usr/lib/systemd/system/remote-fs.target 已经拉 nfs-client.target,但自己写的挂载单元仍要显式声明:

[Unit]

Description=/data nfs mount

After=network-online.target rpcbind.service

Before=remote-fs.target

[Mount]

What=192.168.5.55:/volume1/data

Where=/data

Type=nfs

Options=vers=4,soft

[Install]

WantedBy=multi-user.target

双保险:After 保证网络与端口映射就绪,Before 保证在 remote-fs.target 之前完成,systemd-analyze plot 看不到任何红色。

调试命令一次记全

systemctl list-dependencies --reverse your.service // 谁依赖我

systemctl show -p After your.service // 看我排在谁后面

systemd-analyze blame | grep your.service // 启动耗时

systemd-analyze critical-chain your.service // 关键路径图

journalctl -u your.service -b // 本次启动日志

常见坑汇总

1 把 After 写成 Wants,服务仍然并行,顺序无效。

2 忘记 daemon-reload,改完单元文件不生效,重启老样子。

3 用 network.target 代替 network-online.target,结果服务启动时 IP 还没拿到。

4 WantedBy=multi-user.target 写进 [Unit] 段,应该放在 [Install] 段。

5 禁用服务时只 systemctl disable,不删除 /etc/systemd/system 里手工建的软链,导致下次 enable 冲突。

想让 CentOS 启动不打架,先画依赖图,再改 After、Before、WantedBy,最后 systemd-analyze 确认红色消失,复制上面模板,五分钟收工。

本站部分图片及内容来源网络,版权归原作者所有,转载目的为传递知识,不代表本站立场。若侵权或违规联系Email:zjx77377423@163.com 核实后第一时间删除。 转载请注明出处:https://blog.huochengrm.cn/pc/41783.html

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
请登录后评论...
游客游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~