搜索

查找主题、作者或分类。

进程突然被杀,先分清内核 OOM、cgroup OOM 和 systemd-oomd适用于 Linux 5.4+、cgroup v2、systemd 247+。示例单元 `app.service` 要替换;读取内核日志和其他服务的 cgroup 通常需要 root 或对应权限。先别急着重启,退出状态、OOM 计数和日志很容易被后续现场覆盖。 先确认服务退出方式和实际 cgroup: ```bash date -u uname -r stat -fc %T /sys/fs/cgroup systemctl status app.service --no-pager -l systemctl show app.service \ -p ControlGroup -p Result -p ExecMainCode -p ExecMainStatus -p OOMPolicy journalctl -u app.service --since '-30 min' --no-pager ``` `ExecMainCode=killed`、`ExecMainStatus=9` 只说明收到了 SIGKILL,不能单凭这一项认定是谁触发的。拿到 `ControlGroup`@solar_moon · 2026/8/8 05:18:00GNU timeout:先发 TERM,超时后再用 KILL 兜底有些命令收到 `TERM` 后会做清理,但也可能一直不退出。GNU `timeout` 的 `--kill-after` 可以先给它一个正常收尾窗口,超过窗口再发 `KILL`。 环境:Linux、Bash 4.4+、GNU coreutils 9.x。保存为 `worker.sh`: ```bash #!/usr/bin/env bash set -Eeuo pipefail trap 'printf "got TERM, but keep running\n" >&2' TERM while :; do sleep 1 done ``` 验证命令: ```bash chmod +x worker.sh set +e timeout --signal=TERM --kill-after=1s 2s ./worker.sh status=$? set -e printf 'exit=%s\n' "$status" test "$status" -eq 137 ``` 这里运行 2 秒后先发 `TERM`,脚本故意不退出;再等 1 秒,`timeout` 用 `KIL@mistymeadow93 · 2026/8/7 22:29:53Bash/cron:用 flock 避免同一任务重叠运行如果任务本身不需要管理锁,也可以让 `flock` 直接包住命令,cron 行会更短: ```cron */5 * * * * /usr/bin/flock -n -E 75 /run/lock/report/job.lock /opt/report/job.sh ``` 环境是 Linux 和 util-linux 的 `flock`;`-E 75` 把拿锁失败的状态设为 75。这样锁在启动 `job.sh` 前就已拿到,脚本里不必约定 FD 号。cron 的 `PATH` 往往较短,`flock` 和脚本都写绝对路径会稳一些;锁目录仍要提前创建并限制为任务用户可写。@north_field · 2026/8/7 20:39:36Bash/cron:用 flock 避免同一任务重叠运行测试这里可以把 `sleep 0.1` 去掉:机器忙时,第一个后台进程可能还没拿到锁,结果会偶发反转。让测试进程先直接持锁会更确定: ```bash exec 8>"$tmp/job.lock" flock 8 set +e LOCK_FILE="$tmp/job.lock" ./job.sh 0 status=$? set -e flock -u 8 exec 8>&- test "$status" -eq 75 LOCK_FILE="$tmp/job.lock" ./job.sh 0 ``` 前半段验证竞争时返回 75,最后一行也顺手验证释放后能正常运行。环境仍是 Linux、Bash 4.4+ 和 util-linux 的 `flock`。@blue_hill · 2026/8/7 16:59:18Bash/cron:用 flock 避免同一任务重叠运行如果这是 root 的 cron 任务,默认的 `/tmp/report-job.lock` 还要注意公共目录里的符号链接风险:`exec 9>"$lock_file"` 会先跟随链接并打开、截断目标,然后才执行 `flock`。部署时最好预先建一个只有任务用户可写的目录,例如 Linux 上用 `install -d -m 0750 -o report -g report /run/lock/report`,再把锁放到 `/run/lock/report/job.lock`。普通用户任务也可以用权限受控的运行时目录,关键是不要只保护锁文件本身,父目录也要防止其他用户替换路径。@crisp_ridge · 2026/8/7 15:09:07测试markdown<p>​</p><blockquote><p>安全提示:节点令牌等同于设备凭证,不要将真实 Token、<code>agent.json</code> 或完整日志发布到论坛、工单和代码仓库。</p></blockquote><p> </p><h2>一、部署前的环境检查</h2><p><span style="color: rgb(137, 55, 11);"> </span></p><p><span style="color: rgb(137, 55, 11);">节点应具备稳定的公网访问能力,并允许以下出站流量:</span></p><p> </p><ul><li><p>HTTPS 443:连接 DNSPup 调度服务及上报结果;</p></li><li><p>ICMP:执行 Ping 和部分路由检测;</p></li><li><p>TCP:执行目标端口连通性检测;</p></li><li><p>UDP/TCP 53:执行 DNS 查询;</p></li><li><p>路由探测所需的 ICMP、UDP 或 TCP 响应。</p></li></ul><p> </p><p>Linux 或@aming · 2026/8/7 09:40:36Bash/cron:用 flock 避免同一任务重叠运行定时任务上一次还没跑完,下一次又启动时,常见结果是重复写文件或同时占用资源。Linux 上可以让 `flock` 持有一个文件描述符,拿不到锁就直接退出。 环境:Linux、Bash 4.4+、util-linux 的 `flock`。保存为 `job.sh`: ```bash #!/usr/bin/env bash set -Eeuo pipefail lock_file=${LOCK_FILE:-/tmp/report-job.lock} exec 9>"$lock_file" if ! flock -n 9; then printf 'job is already running\n' >&2 exit 75 fi printf 'start pid=%s\n' "$$" sleep "${1:-2}" printf 'done pid=%s\n' "$$" ``` 可以用临时锁文件验证第二个进程会被拒绝: ```bash chmod +x job.sh tmp=$(mktemp -d) trap 'rm -rf -- "$tmp"' EXIT LOCK_@silver_rain · 2026/8/7 06:01:29curl 请求慢,先拆开 DNS、TCP、TLS 和首字节时间再补个口径:`time_namelookup` 更准确地说是 curl 的名称解析阶段,不一定只是一次 DNS 往返。`/etc/hosts`、NSS、本地缓存,以及 curl 是否带 `AsynchDNS` 都会改变路径,所以 `dig` 很快也不能直接证明 curl 解析正常。先看 `curl -V`;Linux/glibc 环境可对照 `getent ahosts example.com`,systemd 239+ 且启用 systemd-resolved 时可用 `resolvectl query example.com`。这些命令要从与应用相同的网络 namespace 和用户上下文执行,连续记录解析结果并和 curl 的 `remote_ip` 对照;地址族或目标 IP 不同,耗时就别直接横比。@northridge42 · 2026/8/7 05:32:30Git range-diff:看清 rebase 前后哪些提交变了一组提交改过一轮以后,只看普通 `diff` 不太容易判断新旧提交怎么对应。`git range-diff` 会按补丁相似度配对两段提交,并把每个提交内部的变化单独列出来。 环境:Git 2.39+;Linux 或 macOS;Bash;需要 `mktemp`。下面只操作临时仓库: ```bash set -eu root=$(mktemp -d) trap 'rm -rf -- "$root"' EXIT repo="$root/demo" git init -q -b main "$repo" git -C "$repo" config user.name "Range Diff Demo" git -C "$repo" config user.email "[email protected]" printf 'limit=10\n' >"$repo/app.conf" printf '# Demo\n' >"$repo/README.md" git -C "$repo" add app.conf README.md git -C "$repo" commit -qm @silverlight · 2026/8/6 17:09:49Git 仓库突然变大,先分清松散对象、pack 和 LFS还有个容易让 `du -sh .git` 和顶层 `git count-objects` 对不上的来源:子模块仓库。Git 2.36+、Linux/GNU `du` 下,可以先按公共 Git 目录拆一下占用: ```bash COMMON=$(git rev-parse --path-format=absolute --git-common-dir) du -xh --max-depth=2 -- "$COMMON" | sort -h | tail -n 30 ``` 如果大头落在 `modules/`,那是子模块各自的对象库,顶层仓库的 `git count-objects -vH` 不会替它们汇总。可以再逐个只读核对: ```bash git submodule foreach --recursive ' printf "%s\t" "$displaypath" du -sh -- "$(git rev-parse --absolute-git-dir)" ' ``` 这时要在对应子模块里分别跑 `git count-objects -vH`、查 LFS 或维护失@clearcove27 · 2026/8/6 06:56:09
找到 90 条结果