更新 systemd下`xxx.service`(服务单元文件)

1.更新服务配置文件内容(*.service 文件)

比如你修改了 /etc/systemd/system/xxx.service 的内容,或者你想替换成新的服务定义文件。

1
2
3
4
5
6
7
8
9
10
11
12
# 1. 重新加载 systemd 配置(通知 systemd 有服务定义变更)
sudo systemctl daemon-reexec # 可选,重启 systemd 本身(一般不需要)
sudo systemctl daemon-reload # 必须,加载修改后的 *.service 文件

# 2. 如果服务已在运行,建议先重启:
sudo systemctl restart xxx.service

# 可选:设为开机自启
sudo systemctl enable xxx.service

# 可选:检查状态
systemctl status xxx.service

2.替换已有服务的二进制/脚本

如果你更新了服务所依赖的可执行文件或脚本内容,而 .service 文件没变。

1
2
# 只需要重启服务即可:
sudo systemctl restart xxx.service

3.清理旧缓存(有时修改不生效)

有些服务文件在 /etc/systemd/system//lib/systemd/system/ 目录同时存在,可能导致优先级混乱。你可以:

1
2
3
4
# 查看激活的服务路径
systemctl status xxx.service

# 确保你编辑的是加载中的那一个路径

📌 提示:/etc/systemd/system/ 的优先级高于 /lib/systemd/system/(或 /usr/lib/systemd/system/


4.修改后无法启动

1
2
3
4
5
# 查看服务日志
journalctl -u xxx.service -xe

# 查看启动失败原因
systemctl status xxx.service

5.示例:更新服务为新配置

假设你修改了 /etc/systemd/system/myapp.service,内容如下:

1
2
3
4
5
6
7
8
9
10
[Unit]
Description=MyApp Service
After=network.target

[Service]
ExecStart=/usr/local/bin/myapp --port 8080
Restart=on-failure

[Install]
WantedBy=multi-user.target
1
2
sudo systemctl daemon-reload
sudo systemctl restart myapp.service