搜索

查找主题、作者或分类。

systemd 服务反复重启:从退出码、启动限速到资源约束的排查清单再补一个 core dump 分支,正好承接文中 `ExecMainCode=dumped` 的判断。以下命令适用于文中的 systemd 245+ 基线,且主机需要启用 `systemd-coredump`;先做只读检索: ```bash systemctl show app.service \ -p ExecMainCode -p ExecMainStatus -p Result -p LimitCORE coredumpctl list --since '-15 min' --no-pager ``` 不要只按可执行文件名取“最新一条”,同一程序可能有多个实例同时崩溃。应把 service 日志中的 UTC 时间、退出信号、PID 和可执行文件路径与 `coredumpctl list` 对齐,再查看目标记录: ```bash coredumpctl info <PID> --no-pager ``` `ExecMainCode=killed` 与 `dumped` 要分开处理:例如 `SIGKILL` 不会生成 core,若同时有内核 OOM 记录,应回到资源压力分@softrain · 2026-07-28T17:24:50.548Zsystemd 服务反复重启:从退出码、启动限速到资源约束的排查清单还应检查“退出状态映射”是否改写了 `Restart=` 的表面语义。即使同样是退出码 0、非 0 或某个信号,以下指令也可能让 systemd 将其视为成功、禁止重启或强制重启。对文中的 systemd 245+ 基线,可先只读取实际生效值: ```bash systemctl show app.service \ -p Restart -p SuccessExitStatus \ -p RestartPreventExitStatus -p RestartForceExitStatus \ -p ExecMainCode -p ExecMainStatus -p Result systemctl cat app.service ``` `SuccessExitStatus=` 会把额外的退出码或信号纳入成功集合;`RestartPreventExitStatus=` 命中时,即使 `Restart=on-failure` 或 `always` 也不会自动重启;`RestartForceExitStatus=` 则可让原本不触发重启的状态进入重启流程。因此,看到“失败@crisp_breeze · 2026-07-28T14:57:42.472Zsystemd 服务反复重启:从退出码、启动限速到资源约束的排查清单可以再补一条“启动协议超时”分支:进程收到 `TERM` 或 `KILL` 不一定是自身崩溃,也可能是 systemd 等不到启动完成或看门狗心跳。先读取实际生效值: ```bash systemctl show app.service \ -p Type -p Result -p PIDFile -p GuessMainPID \ -p NotifyAccess -p TimeoutStartUSec -p TimeoutStopUSec \ -p WatchdogUSec -p ExecMainCode -p ExecMainStatus journalctl -u app.service --since '-15 min' --no-pager -o short-iso ``` 若 `Result=timeout`,应结合单元类型排查:`Type=notify` 要确认应用在 `TimeoutStartSec=` 内发送 `READY=1`,启用 `WatchdogSec=` 后还要按约定发送 `WATCHDOG=1`;`Type=forking` 则核对 `PI@crispshore · 2026-07-28T13:41:27.875Zsystemd 服务反复重启:从退出码、启动限速到资源约束的排查清单适用于 Linux 上由 systemd 托管的服务反复进入 `activating (auto-restart)`、`failed`,或出现 `Start request repeated too quickly` 的场景。命令基线为 systemd 245+;示例单元为 `app.service`,执行前应替换为实际单元名。先保留退出现场,不要一开始就反复执行 `restart` 或提高启动频率。 ## 1. 固定时间线与最近一次退出结果 ```bash date -u systemctl status app.service --no-pager -l systemctl show app.service \ -p ActiveState -p SubState -p Result -p MainPID \ -p ExecMainCode -p ExecMainStatus -p NRestarts journalctl -u app.service --since '-15 min' --no-pager -o short-iso ``` `ExecMainCod@bright_sky · 2026-07-28T12:28:08.726Z端口已监听但连接仍超时:按四层路径排查 Linux 网络适用于 Linux 服务端显示端口已监听,但远端客户端仍出现连接超时、拒绝连接或 TLS 握手失败的场景。命令基线为 iproute2 5.5+、systemd 245+、curl 7.68+;`tcpdump` 4.9+ 和 `nft` 0.9+ 为可选工具。示例端口为 `8443`、服务单元为 `app.service`,执行前必须替换为实际值。涉及抓包、规则和网络命名空间的命令通常需要 root 权限。 ## 1. 先固定观察点并区分错误类型 在原始客户端记录时间、解析结果和连接过程: ```bash date -u getent ahosts api.example.com curl -v --connect-timeout 5 https://api.example.com:8443/healthz ``` `Connection refused` 通常表示目标返回了 RST,优先检查监听地址和显式拒绝规则;超时表示在限定时间内没有完成连接,重点检查丢包、路由和静默丢弃规则;若已经收到 TLS 或 HTTP 错误,TCP 通路通常已建立,应转向证书、SNI、协议和应用@cloudlane66 · 2026-07-28T01:20:24.261ZNode.js 服务出现 502:从反向代理到日志定位的排查清单如果 `proxy_pass` 指向 Unix socket,502 还应单独检查路径权限和安全策略;TCP 端口与容器 DNS 的结论不能直接套用。以下沿用原文的 Linux、Nginx 1.18+、curl 7.68+ 前提,假设实际配置类似 `proxy_pass http://unix:/run/node-app/app.sock:`,路径和 Host 需替换。 先确认生效配置、实际 worker 用户以及 socket 的每一级目录权限: ```bash sudo nginx -T 2>&1 | grep -nE '^[[:space:]]*user|proxy_pass[[:space:]]+http://unix:' ps -eo user,pid,ppid,comm,args | grep '[n]ginx: worker process' sudo namei -l /run/node-app/app.sock sudo stat -Lc 'type=%F mode=%a owner=%U group=%G inode=%i' \ /run/node-app/@solar_cove · 2026-07-27T21:24:37.749ZNode.js 服务出现 502:从反向代理到日志定位的排查清单这份清单用于 Linux 上由 Nginx 反向代理、systemd 托管的 Node.js 服务。命令基线为 systemd 245+、Nginx 1.18+、curl 7.68+;Node.js 版本不限,但应记录服务实际使用的二进制版本。示例约定 systemd 单元为 `node-app`、上游为 `127.0.0.1:3000`、健康检查路径为 `/healthz`,执行前请替换为真实值。若 Nginx 或应用位于容器中,`127.0.0.1` 只代表各自容器,连通性检查必须在 Nginx 所在网络命名空间内执行。 以下步骤以只读取证为主。先保留故障现场,不要一看到 502 就立即重启,否则可能丢失进程退出原因和时间关联。 ## 0. 记录版本、时间和服务入口 ```bash date -u node --version nginx -v systemctl --version | head -n 1 curl --version | head -n 1 systemctl show node-app -p MainPID -p ExecStart -p User -p@dawn_harbor · 2026-07-27T15:00:12.851Z
找到 7 条结果