必须执行 systemctl daemon-reload,否则新配置不会被加载进内存,后续操作仍基于旧定义,并触发“Warning: xxx.service changed on disk”提示;该命令适用于编辑系统级服务文件、修改drop-in片段或用户级服务文件后,需配合sudo或--user参数执行,并用systemctl cat验证生效。

修改 systemd 服务配置文件后,必须执行 systemctl daemon-reload,否则新配置不会被加载进内存,后续的 start、restart 或 enable 等操作仍基于旧定义,甚至会触发 “Warning: xxx.service changed on disk” 提示。
什么时候必须运行 daemon-reload
以下修改完成后,不执行该命令就无法生效:
- 编辑了
/etc/systemd/system/xxx.service或/usr/lib/systemd/system/xxx.service - 新增、删除或修改了 drop-in 配置片段(如
/etc/systemd/system/xxx.service.d/override.conf) - 在用户级目录
$HOME/.config/systemd/user/下增删改了个人服务文件
正确执行 reload 的方式
根据服务作用域选择对应命令:
- 系统级服务(默认):
sudo systemctl daemon-reload - 用户级服务(如 Podman 容器、本地守护进程):
systemctl --user daemon-reload
执行后,再进行 start、enable 或 restart 才能基于最新配置工作。
验证配置是否真正载入
仅执行 daemon-reload 不代表配置无误,还需确认:
- 用
systemctl cat xxx.service查看当前生效的单元内容,核对修改项是否已出现 - 若之后
start或restart失败,立即运行journalctl -u xxx.service --since "1 minute ago"查错,常见问题包括语法错误、路径不存在、权限不足 - 对新增的服务文件,还需
systemctl enable xxx.service才能开机自启
注意:daemon-reload ≠ reload 服务本身
这是两个不同层级的操作:
-
daemon-reload刷新的是 systemd 自己管理的单元定义(即 .service 文件内容),属于“管理器配置重载” -
systemctl reload xxx.service是向正在运行的 xxx 进程发信号(通常是 SIGHUP),要求它自己重读配置文件——这取决于服务是否支持,且依赖单元文件中是否定义了ExecReload= - 如果改的是
ExecStart=或启动参数,仅 daemon-reload 不够,必须systemctl restart xxx.service











