Linux日志报错怎么看_常见日志错误解析

6次阅读

Linux日志报错怎么看_常见日志错误解析

linux日志里的报错不是乱码,而是系统在“说话”——关键看懂它说的是哪类问题。核心思路是:先定位错误类型(权限?端口?磁盘?),再结合日志上下文和时间点判断根因。

常见错误代码含义与典型场景

日志中高频出现的错误码往往指向明确问题,无需逐行读完日志就能缩小范围:

  • EACCES (Permission denied):进程没权限访问文件或目录。比如服务启动时提示“cannot open /etc/myapp/config”,检查该配置文件的属主和权限(ls -l /etc/myapp/config
  • ENOENT (No such file or Directory):路径根本不存在。常见于脚本硬编码了错误路径,或服务依赖的二进制、配置、证书文件被误删
  • EADDRINUSE (Address already in use):端口被占。运行sudo ss -tuln | grep :8080可查谁在用8080端口
  • ENOSPC (No space left on device):磁盘满。不只是/分区,也可能是/var/log所在分区或/run(tmpfs)空间耗尽,用df -h确认
  • ECONNREFUSED / ETIMEDOUT:目标服务未运行或网络不通。前者多见于本地连接失败(如数据库没启),后者更倾向防火墙、路由或远端宕机
  • SIGSEGV / SIGABRT:程序崩溃。通常出现在应用日志或dmesg输出中,说明有内存越界或主动中止,需查对应服务的或core dump

快速定位报错所在的日志源

别盲目翻所有日志,按问题性质选对入口:

  • 系统级故障(启动失败、内核警告、硬件异常)→ 查dmesg -T/var/log/kern.log
  • 服务无法启动/反复退出 → 先看systemctl status 服务名,再执行journalctl -u 服务名 -n 50 --no-pager看最近50行
  • ssh登录失败、sudo被拒 → 直接查/var/log/auth.logdebian系)或/var/log/secure(RHEL系)
  • Web服务返回502/503 → 看nginx/apacheError.log,而非access.log;同时用journalctl -u nginx交叉验证
  • 定时任务出错 → 检查/var/log/cron,并确认crond是否在运行(systemctl status cron

高效查看和过滤错误日志的实操命令

不用打开大文件盲搜,几条命令就能聚焦关键信息:

  • 实时盯住错误: sudo journalctl -f -p err(systemd系统) sudo tail -f /var/log/syslog | grep -i "error|fail|denied"(传统syslog)
  • 查某服务最近1小时的错误: journalctl -u nginx --since "1 hour ago" -p err
  • 从海量日志中提取带时间戳的错误行(适配常见格式): grep -i "error|fail" /var/log/messages | head -20
  • 确认是不是权限导致读不了日志: sudo ls -l /var/log/messages,若显示Permission denied,必须加sudo再操作

排查时容易忽略的关键细节

很多问题卡在“以为找到了,其实不是”:

  • 日志时间可能不准:系统时间偏差会导致错误时间难定位,先运行timedatectl status确认时区和同步状态
  • 错误是结果不是原因:比如“Connection refused”常是上游服务挂了,要顺藤摸瓜查那个上游服务的日志,而不是只修当前报错的服务
  • 日志轮转后旧记录丢失:默认/var/log/messages会被logrotate压缩归档,查更早的问题得翻/var/log/messages.1.gz甚至.2.gz,用zgrep搜索
  • 某些错误只在journalctl里有,不在文件日志中:如果没配置journald持久化(/var/log/journal目录不存在),重启后日志就没了
text=ZqhQzanResources