| 场景 | 服务启动失败/立即退出 |
|---|---|
| 目标 | 定位失败层并修复 |
| 工具链 | status → journalctl → verify → 手动复现 |
第 1 步:状态与退出码
第 1 步:状态与退出码
systemctl status myapp --no-pager -l
systemctl show myapp -p ExecMainStatus,Result,NRestarts第 2 步:完整日志
第 2 步:完整日志
journalctl -u myapp -n 200 --no-pager第 3 步:单元语法与依赖
第 3 步:单元语法与依赖
systemd-analyze verify /etc/systemd/system/myapp.service
systemctl list-dependencies myapp | head第 4 步:手动复现同环境
第 4 步:手动复现同环境
sudo -u appuser env -i PATH=/usr/bin:/bin /opt/myapp/bin/start --config /etc/myapp/app.conf; echo "exit=$?"第 5 步:权限与路径
第 5 步:权限与路径
namei -l /opt/myapp/bin/start
ls -ld /opt/myapp /etc/myapp第 6 步:端口冲突
第 6 步:端口冲突
ss -lntp | grep -E '(:8080|java|node)'第 7 步:资源限制
第 7 步:资源限制
journalctl -u myapp | grep -iE 'oom|limit|denied|permission' | tail七步的核心是「让 systemd 的运行环境在手边复现」:多数失败在路径、用户权限或环境变量三处。