Ubuntu 服务管理与日志:systemctl 与 journalctl
给出 Ubuntu 上服务排错的标准流程:systemctl 看状态、journalctl 翻日志、常见失败原因与恢复手段,附命令速查。
结论先行
服务出问题先跑一条命令:systemctl status <服务>,它会同时告诉你状态、最近几行日志和是否启用。要深挖日志用 journalctl。排错顺序固定:状态 → 日志 → 配置 → 重启。
命令速查
systemctl status ssh # 状态 + 最近日志
systemctl restart ssh # 重启(改了配置后用)
systemctl enable ssh # 开机自启
systemctl is-enabled ssh # 是否已启用
journalctl -u ssh -n 100 # 该服务最近 100 行
journalctl -u ssh --since -1h # 最近一小时
status 输出的三行看什么
| 输出 | 含义 |
|---|---|
active (running) |
正常 |
inactive (dead) |
没在跑,看是否本该跑 |
failed |
启动过程报错,日志区看 exit code / status 字样 |
日志里看到
denied字样且带 AppArmor 标记,说明是安全模块拦的而不是服务本身坏;看到Unit ... failed with result 'timeout'通常是启动脚本卡住。
常见失败原因
- 依赖没起:服务要数据库先起来,
After=/Wants=没配对 - 端口被占:另一个程序占了同一端口,
ss -lntp查占用者 - 配置语法错:改完配置忘了
daemon-reload,或语法校验命令(多数服务有xxx -t)没跑 - 权限不对:
ExecStart里的路径不可执行,或服务用户读不到文件
桌面版(桌面版条目)的服务偏图形栈,服务器版(服务器版条目)偏网络服务,排错命令两边完全一致,索引见 Ubuntu 索引页。