Linux systemd服务管理实操
systemd 到底是什么
简单来说,systemd 是 Linux 系统里负责管理服务的“大管家”。
你装了一个 Nginx 或 MySQL,想让它在开机后自动运行,或者手动启动、停止、重启,都可以通过 systemd 来完成。
它用 .service 文件定义每个服务的规则,路径通常在 /etc/systemd/system/。
动手前需要确认两件事
- 系统是否使用 systemd:大部分 CentOS 7+、Ubuntu 15.04+、Debian 8+ 都默认用 systemd。在终端输入
ps --no-headers -o comm 1,如果返回systemd,那就对了。 - 有 sudo 权限:管理服务需要 root 权限,普通用户前面要加
sudo。
核心操作:启动 / 停止 / 重启 / 查看状态
下面以 nginx 服务为例(如果你没有安装 Nginx,可以用 cron 或 sshd 代替)。
1. 启动服务
sudo systemctl start nginx
没有报错就是成功。
如果服务名写错,系统会提示 Failed to start nginx.service: Unit not found。
2. 设置开机自启
sudo systemctl enable nginx
这条命令会在 /etc/systemd/system/multi-user.target.wants/ 下创建一个软链接,下次开机自动启动。
3. 查看运行状态
sudo systemctl status nginx
输出里会显示 Active: active (running) 表示正在运行。
注意看最下面的日志,如果有报错,会直接列出来。
4. 停止服务
sudo systemctl stop nginx
再查状态就会变成 inactive (dead)。
5. 重启服务(常用于修改配置后)
sudo systemctl restart nginx
这条等于 stop + start,会短暂中断服务。
如果你只是重载配置,用 reload 更优雅:
sudo systemctl reload nginx
高频报错与避坑说明
报错1:Unit not found
原因一般是服务名写错,或者根本没有安装那个服务。可以用 systemctl list-unit-files | grep nginx 查看是否存在。
报错2:Permission denied
忘记加 sudo 了。管理服务必须用 root 权限。
报错3:Job for xxx.service failed
通常是服务本身配置出错。比如 Nginx 的配置文件语法错误。可以单独运行 nginx -t 检查配置,修正后再 start。
避坑提醒:
- 修改服务文件后(比如自己写了一个
.service),必须执行sudo systemctl daemon-reload让 systemd 重新加载。 - 不要直接用
kill命令杀死服务,应该用systemctl stop,否则 systemd 会认为状态异常。 - 禁用开机自启用
disable,不要手动删除软链接。
验证你的服务是否真的可用
如果服务是网络服务(如 Nginx、Apache),可以用浏览器或 curl 来验证:
curl -I http://localhost
返回 200 OK 就说明正常。
如果是后台应用(如 Node.js 服务),可以查看日志:
sudo journalctl -u 你的服务名 -f
-f 是实时跟踪,能看到最新的输出,方便排查启动阶段的问题。
如果一切正常,你已经在用 systemd 管理服务了。
遇到异常时,先检查状态和日志,90% 的问题都能从这里找到线索。