首页/系统/Linux 运维命令速查/场景:服务反复崩溃怎么查日志

场景:服务反复崩溃怎么查日志

服务 restart 循环:从 systemd 状态到应用日志逐层定位,先看退出码,再看崩溃前最后输出与内核记录。

Linux 运维命令速查系统更新于 2026-10-12
场景systemd 服务起不来或反复重启
目标拿到退出原因与崩溃现场
工具链systemctl status → journalctl → 内核日志

第 1 步:看单元状态与退出码

第 1 步:看单元状态与退出码
systemctl status myapp --no-pager -l
systemctl show myapp -p ExecMainStatus,ExecMainCode,NRestarts

第 2 步:看日志尾部

第 2 步:看日志尾部
journalctl -u myapp -n 200 --no-pager
journalctl -u myapp --since '10 min ago' | grep -i -E 'error|exception|fail|panic'

第 3 步:区分应用崩溃与资源问题

第 3 步:区分应用崩溃与资源问题
dmesg -T | tail -n 30
dmesg -T | grep -i -E 'segfault|oom|killed'

第 4 步:验证启动命令本身

第 4 步:验证启动命令本身
systemctl cat myapp | sed -n '/\[Service\]/,$p'
# 手动以同用户同环境跑一遍命令观察报错
sudo -u appuser /opt/myapp/bin/start --config /etc/myapp.conf
退出码 1 是通用失败、126/127 多为权限/找不到程序、137/9 是 SIGKILL(常见 OOM 或超时)——先看码再读日志方向不跑偏。

易错点

  • 只盯应用日志不看 systemd 状态会漏掉启动前错误(WorkingDirectory 不存在、User 错误导致 exec 失败)
  • 限制启动频率(StartLimitBurst)触发后 systemd 会拒绝再拉起,需 systemctl reset-failed 后重试

数据来源与参考

  • man 5 systemd.service(退出码)
  • man 1 systemctl
  • systemd 官方文档 Troubleshooting

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌