systemd 服务自启与排障速记
systemd 是大多数 Linux 发行版的初始化系统与服务管理器。服务能不能开机自启、崩了能不能自己恢复、出了问题去哪查日志,都由它负责。本文把最常用的命令和排障套路记成速查笔记,照着敲就能用。
一、自启:enable 管开机,start 管现在
很多人把 enable 和 start 混在一起,其实分工很清楚:enable 只决定开机是否自启,start 只决定现在是否运行。想让服务既开机自启、现在也跑起来,两个都要做,或者用 --now 一步到位。
systemctl enable nginx
systemctl is-enabled nginx
systemctl enable --now nginx
systemctl disable nginx
检查自启状态时,enabled 表示已设置自启,disabled 表示未设置。如果服务是 static 或 masked,enable 会报错,这时要先看单元文件本身。
二、查状态:先看 status,再看日志
服务出问题先别急着重启,先看状态和日志,多数原因一眼就能定位。
systemctl status nginx --no-pager -l
systemctl is-active nginx
journalctl -u nginx -n 100 --no-pager
journalctl -u nginx --since "1 hour ago" --no-pager
status 里重点看 Loaded、Active 和最后几行日志;journalctl -u 只看指定服务的日志,加上 --since 可以只看最近一小时,避免被旧日志淹没。
三、启动失败:四类常见原因
第一,ExecStart 路径写错或可执行文件不存在,status 会提示 No such file or directory,修正路径后执行 systemctl daemon-reload 再启动。
第二,端口被占用。Nginx 常用 80 端口,先查占用者,再决定改端口还是停掉冲突进程:
ss -tlnp | grep ':80'
lsof -i :80
第三,权限或目录问题。检查 service 文件里的 User、WorkingDirectory,以及日志目录是否存在、属主是否正确,目录不存在时服务往往静默失败。
第四,依赖还没就绪。服务启动太早、网络还没起来时,可以在 [Unit] 里加 After=network-online.target,并配 Wants=network-online.target。
四、写一个最小的 service 文件
以自定义程序 myapp 为例,新建 /etc/systemd/system/myapp.service:
[Unit]
Description=My App Service
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/myapp
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
写好后依次执行 daemon-reload、enable --now 和 status,确认 Active 为 running。Restart=on-failure 的意思是正常退出不重启、异常退出 5 秒后自动重启,适合常驻服务。
五、排障速查表
restart 是停掉再启动;reload 是不中断服务重载配置,前提是程序支持;daemon-reload 是 systemd 重新读取单元文件,改了 service 文件后必须执行。记不住时就按“改文件—daemon-reload—restart—看 status 与日志”这个顺序走,八成问题十分钟内能定位。
- 点赞
- 收藏
- 关注作者
评论(0)