在 CentOS 中“替换系统服务”通常指 用一个新的 systemd 服务单元替换掉原有的系统服务,或者 更换某个服务背后的程序/实现。下面按常见场景给你一个完整说明(适用于 CentOS 7/8/Stream)。
CentOS 7 及以后版本使用 systemd 管理服务:
.servicesystemctl/usr/lib/systemd/system/ ✅(软件包安装)/etc/systemd/system/ ✅(管理员自定义,优先级更高)例如:
原来的服务 myapp.service 启动的是 /usr/bin/old-app,现在换成 /usr/bin/new-app
sudo vi /etc/systemd/system/myapp.service
示例:
[Service]
ExecStart=/usr/bin/new-app
如果原文件在
/usr/lib/systemd/system/,建议 复制到/etc/systemd/system/再改(避免被升级覆盖)
sudo cp /usr/lib/systemd/system/myapp.service /etc/systemd/system/
sudo vi /etc/systemd/system/myapp.service
sudo systemctl daemon-reload
sudo systemctl restart myapp
例如:
用 newapp 替换系统自带服务 oldapp
sudo systemctl stop oldapp
sudo systemctl disable oldapp
sudo vi /etc/systemd/system/newapp.service
示例:
[Unit]
Description=New Application Service
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/newapp
Restart=always
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable newapp
sudo systemctl start newapp
⚠️ 高风险操作,务必谨慎
sudo cp /usr/lib/systemd/system/sshd.service /usr/lib/systemd/system/sshd.service.bak
sudo vi /usr/lib/systemd/system/sshd.service
sudo systemctl daemon-reload
sudo systemctl restart sshd
✅ 建议:
/etc/systemd/system/ 中覆盖,而不是直接改 /usr/lib/systemd/system/systemctl status 服务名
查看实际执行的程序:
systemctl cat 服务名
查看进程:
ps -ef | grep 服务名
sudo systemctl daemon-reload
ss -lntp
sudo chmod +x /usr/local/bin/新程序
| 需求 | 推荐方式 |
|---|---|
| 只换程序 | 改 ExecStart |
| 完全替换服务 | 新建 service |
| 覆盖系统服务 | 放 /etc/systemd/system/ |
| 防止升级覆盖 | 不用 /usr/lib/systemd/system/ |
如果你能具体说明:
我可以给你 精确的命令和 service 文件示例。