systemctl daemon-reload用于重新加载systemd单元文件,使新增、修改或删除的.service等配置生效;它不重启服务,仅更新内存中配置,后续需手动restart才能应用运行时变更。

修改 systemd 的 Unit 配置文件(如 .service)后,必须执行 systemctl daemon-reload,否则 systemd 完全不会感知变更——它不会自动扫描或热加载磁盘上的新内容。
什么时候必须用 daemon-reload?
当你做了以下任一操作时,就需要重载:
- 新增、删除或重命名了
/etc/systemd/system/、/run/systemd/system/或/usr/lib/systemd/system/下的 Unit 文件 - 编辑了已存在的
.service、.socket、.timer等文件(比如改了ExecStart、Environment或依赖项) - 创建或修改了 drop-in 覆盖文件(例如
/etc/systemd/system/nginx.service.d/override.conf)
重载后还要 restart 吗?
daemon-reload 只是让 systemd 重新读取并解析所有 Unit 文件,更新内存中的配置和依赖图;它不会重启任何正在运行的服务。所以:
- 若只是新增服务或启用新 timer,reload 后直接
systemctl start xxx即可 - 若修改的是已在运行的服务(如调整了
RestartSec),需手动systemctl restart xxx才能让新配置生效 - 某些关键字段(如
Type、User、CapabilityBoundingSet)仅在服务启动时读取,reload + restart 是唯一生效方式
常见误区与验证方法
很多人误以为 reload 就等于服务已应用新配置,其实不然:
-
systemctl daemon-reload不检查语法错误,出错要等后续 start/restart 时才暴露 - 执行后可用
systemctl cat xxx.service确认看到的是你刚保存的内容 - 用
systemctl show xxx.service -p ExecStart查看实际生效的启动命令,验证是否被 drop-in 正确覆盖 - 如果服务没按预期行为运行,先查
systemctl status xxx和journalctl -u xxx -n 20
不推荐的替代做法
不要靠重启机器或 systemctl daemon-reexec 来“解决” Unit 修改不生效的问题:
-
daemon-reexec是重载 systemd 自身的主进程配置(如system.conf),对普通服务 Unit 无效 - 重启整机代价大,且掩盖了配置管理流程中的疏漏
- 盲目
restart而不先 reload,可能导致 systemd 仍按旧 Unit 定义执行,引发意料外行为











