Linux:这啥命令?这台服务器我说了算-日志与故障追踪——“程序不说话,日志替它招供!”
第十二章:日志与故障追踪——“程序不说话,日志替它招供!”
服务器突然罢工,程序只留下一句“启动失败”。这时候别急着重装,也别对着屏幕许愿:先查日志。
日志像服务器的朋友圈:出事才有人翻记录。
本章环境:采用
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 说明连接被拒绝,还需要继续检查服务监听、目标地址和网络策略。
本章挑战
- 用
journalctl -b -p err找本次开机的错误。 - 为任意已安装的服务查询最近 20 条日志。
- 写入一条自定义
logger消息并找出来。 - 查看
/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 远程连接——“人在家中坐,服务器听我说!”》
- 点赞
- 收藏
- 关注作者
评论(0)