Linux 入门:用 systemctl 与 journalctl 在十分钟内定位服务故障
服务起不来的时候,很多人第一反应是反复重启。其实重启之前先把状态和日志看清楚,往往十分钟就能找到原因。本文用 Linux 上最常见的两个工具 systemctl 与 journalctl,讲一套新手也能直接照做的排查顺序。
第一步,先看服务状态。执行 systemctl status 服务名,可以看到服务是正在运行、已经退出,还是启动失败;再用 systemctl is-active 服务名 和 systemctl is-enabled 服务名,区分是这次没有起来,还是根本没有设置开机自启。如果服务启动后立刻退出,问题多半在配置、端口或依赖上,而不是系统本身坏了。
第二步,再看日志,不要只看最后一行。执行 journalctl -u 服务名,可以按时间顺序看到该服务的完整日志;加上 -n 100 只看最近一百条,加上 --since "10 minutes ago" 只看最近十分钟,加上 -p err 只看错误级别。用 journalctl -u 服务名 -f 可以实时跟踪日志,复现一次故障,日志里往往会直接出现报错的关键词。
第三步,对照三类常见原因。第一是端口被占用,例如旧进程没有退出,新进程就无法绑定端口,可以用 ss -tlnp 查看占用端口的进程,再决定是停止旧进程还是改端口。第二是配置文件写错,例如少了一个括号、多了一个空格,启动前先用服务自带的检查命令验证,例如 Nginx 可以用 nginx -t。第三是权限或依赖问题,例如目录不可写、依赖的数据库或网络还没有就绪,这时日志里通常会有权限被拒绝或者连接失败的提示。
举一个完整例子。假设一个 Web 服务启动后立刻退出,先执行 systemctl status 查看状态为失败,再执行 journalctl -u 该服务 -n 50,发现日志提示地址已经被占用。接着用 ss -tlnp 确认占用端口的进程,确认是之前没有退出的旧进程后将其停止,再执行 systemctl restart 重新启动,最后用 curl 或者浏览器访问一次,确认服务恢复正常。整个过程没有盲目重启,也没有改动不相关的配置。
最后给新手三个习惯。第一,改配置之前先备份原文件,改错了可以立刻恢复。第二,生产环境不要直接删除日志文件来省空间,先确认日志轮转是否正常。第三,把每次故障的原因和解决办法记下来,下一次遇到类似报错,先搜索自己的记录,再去查文档。先状态、再日志、再复现,这条顺序用熟了,大多数服务故障都可以在十分钟内定位。
- 点赞
- 收藏
- 关注作者
评论(0)