Linux:这啥命令?这台服务器我说了算-日志与故障追踪——“程序不说话,日志替它招供!”

举报
yd_240046519 发表于 2026/11/07 07:53:21 2026/11/07
【摘要】 第十二章:日志与故障追踪——“程序不说话,日志替它招供!”服务器突然罢工,程序只留下一句“启动失败”。这时候别急着重装,也别对着屏幕许愿:先查日志。日志像服务器的朋友圈:出事才有人翻记录。本章环境:采用 systemd 的 Ubuntu / Debian。不同发行版的日志路径可能不同。 1. 日志都藏在哪?常见位置是 /var/log/:位置主要内容/var/log/各类系统和应用日志目录...

第十二章:日志与故障追踪——“程序不说话,日志替它招供!”

服务器突然罢工,程序只留下一句“启动失败”。这时候别急着重装,也别对着屏幕许愿:先查日志。

日志像服务器的朋友圈:出事才有人翻记录。

本章环境:采用 systemd 的 Ubuntu / Debian。不同发行版的日志路径可能不同。

1. 日志都藏在哪?

常见位置是 /var/log/:

位置 主要内容
/var/log/ 各类系统和应用日志目录
/var/log/auth.log 登录、认证相关事件(部分系统才有)
/var/log/nginx/access.log Nginx 访问记录
/var/log/nginx/error.log Nginx 错误记录

先看看实际有什么:

sudo ls -lh /var/log/

注意:不是所有系统都有 syslog、auth.log 等文本文件。很多日志交给 systemd-journald 保存,用 journalctl 查看即可。

2. journalctl:系统级“案发记录”

查看系统日志:

journalctl

内容太多?只看最近 30 条:

journalctl -n 30 --no-pager

只看本次开机:

journalctl -b

只看警告及更严重级别:

journalctl -p warning -b

只看今天上午 9 点之后:

journalctl --since "today 09:00"

实时盯着新日志:

journalctl -f

按 Ctrl+C 退出。追日志可以,别把自己也追成了后台进程。

3. 服务为什么起不来?

先看状态:

systemctl status nginx

再查服务日志:

sudo journalctl -u nginx -n 50 --no-pager

实时追踪:

sudo journalctl -u nginx -f

这里的 -u 表示指定 systemd 服务单元。遇到失败,重点找 failed、permission denied、address already in use 等信息。

如果是 Nginx 配置问题,先测配置:

sudo nginx -t

**先看报错,再修原因,最后重启。**别只会一句 systemctl restart,服务器不是游戏机。

4. grep + tail:精准搜索“嫌疑人”

如果应用写的是普通文本日志:

sudo tail -n 50 /var/log/nginx/error.log

按关键词查:

sudo grep -inE 'error|failed|denied' /var/log/nginx/error.log

只看最近新增内容:

sudo tail -f /var/log/nginx/error.log

提示:Nginx 需要安装并运行;日志文件不存在时,请先检查实际配置的日志路径。

5. 别忽略时间和错误上下文

查问题要先弄清楚什么时候开始出错:

date
journalctl --since "1 hour ago" -p err

看到一条错误,不要只截那一行。前后还可能记录了配置加载、依赖失败和重试过程。

如果日志显示时间和你记忆里的不一致,检查时区:

timedatectl

6. 日志太大怎么办?

先看看日志占用:

sudo journalctl --disk-usage
sudo du -sh /var/log

系统日志通常由 journald 管理;文本日志常由 logrotate 轮转。

检查轮转配置:

ls /etc/logrotate.d/

不要上来就 rm -rf /var/log/*。 日志可能正被程序使用,随意删除还会让排障线索一起“失踪”。清理前先确认保留要求和备份策略。

7. 实战:自己制造一条日志,再抓住它

这次用 logger 写一条安全的测试日志。

第一步:写入测试日志

logger -t penguin-demo "ALERT: penguin has escaped"

第二步:按标签查找

journalctl -t penguin-demo -n 10 --no-pager

第三步:限定时间范围

journalctl -t penguin-demo --since "5 minutes ago" --no-pager

如果没看到记录,先检查 systemd-journald 是否正常运行,或使用 sudo journalctl 再试。

做到这里,你已经掌握了写入 → 检索 → 缩小范围的基本排障闭环。

8. 一张故障排查路线图

服务异常
   ↓
systemctl status 查看状态
   ↓
journalctl -u 查看具体报错
   ↓
按时间、级别和关键词缩小范围
   ↓
检查配置 / 权限 / 端口 / 磁盘
   ↓
修复后验证状态和新日志

记住:日志是证据,不一定是结论。 比如 connection refused 说明连接被拒绝,还需要继续检查服务监听、目标地址和网络策略。

本章挑战

  1. 用 journalctl -b -p err 找本次开机的错误。
  2. 为任意已安装的服务查询最近 20 条日志。
  3. 写入一条自定义 logger 消息并找出来。
  4. 查看 /var/log 空间占用,判断是否需要日志轮转。

命令速查

journalctl -b -p err
journalctl -u nginx -n 50
journalctl --since "1 hour ago"
journalctl -f
sudo tail -f /var/log/nginx/error.log
sudo journalctl --disk-usage
logger -t penguin-demo "hello Linux"

下一章:《第十三章:SSH 远程连接——“人在家中坐,服务器听我说!”》

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。