服务起不来别急着重装:用 journalctl 三步定位问题
服务器上的服务突然起不来,很多人第一反应是重启机器,或者干脆重装。重启有时能蒙对,但问题本身还在,下次还会出现。systemd 的服务每次启动失败都会留下记录,journalctl 就是查这份记录的工具,用熟三步,大多数启动失败都能在几分钟内定位。
第一步,先看服务自己的状态。systemctl status nginx 这类命令会显示服务是 active 还是 failed,以及最后几行日志。failed 后面常跟一句 exit code,比如 code=exited, status=1/FAILURE,这只能告诉你它退出了,原因还得往下挖。注意看 Main PID 和 Loaded 那几行:Loaded 告诉你实际加载的是哪个 unit 文件,改配置改错文件是新手最常见的坑——改了 /etc/nginx/nginx.conf,服务读的却是另一个路径的配置。
第二步,用 journalctl 按服务过滤。journalctl -u nginx --since "10 minutes ago" 只看这个服务最近 10 分钟的日志,比翻整个系统日志快得多。加上 -n 100 是看最后 100 行,-f 是实时跟随,服务正在反复重启时用 -f 能直接看到它每次失败的瞬间。如果想看某一次启动的完整过程,可以先 systemctl restart nginx,再立刻跑这条命令,日志就是干净的一次启动记录。
第三步,读错误本身,而不是猜。几种常见报错一眼就能认出来:bind() to 0.0.0.0:80 failed (98: Address already in use) 是端口被占了,先 ss -tlnp | grep :80 看看谁占着,再决定是停掉旧进程还是改端口;failed to load certificate 或 cannot load certificate 是证书路径错了或者文件权限不对,证书文件一般要让运行服务的用户能读;Permission denied 出现在日志文件、数据目录上时,先看目录属主是不是服务用户,而不是直接 chmod 777——777 能解决问题,也会把问题放大。配置语法错误最省事:Nginx 有 nginx -t,很多服务都有自己的 --test 或 configtest,改完配置先测再重启,失败也知道错在哪一行。
还有一个容易被忽略的点:磁盘满了服务也可能写不进日志,看起来像“没有任何报错”,其实是没地方写了,journalctl --disk-usage 能先看一眼日志占了多少空间。
养成习惯:服务出问题,先 systemctl status,再 journalctl -u <服务名> --since,最后读报错原文。大部分时候答案已经写在日志里了,只是之前没去看。
- 点赞
- 收藏
- 关注作者
评论(0)