xiaowei-system/skills/devops/self-healing-infrastructure/references/systemd-tmpfiles-trap-20260...

1.6 KiB
Raw Blame History

systemd-tmpfiles-clean 陷阱 — /tmp 路径不稳定2026-09-01 实测)

教训systemd unit 文件里写 /tmp/... 路径,会被 systemd-tmpfiles-clean.timer(默认每 10 天或启动时清掉导致服务启动失败exit=203/EXEC

症状

systemctl --user status llama-server-7b
Active: activating (auto-restart) (Result: exit-code) ... code=exited, status=203/EXEC

journalctl -u llama-server-7b
ExecStart=/tmp/llama-vulkan/llama-b10679/llama-server ... (code=exited, status=203/EXEC)

status=203/EXEC = 找不到 ExecStart 指定的二进制文件。

根因

# systemd-tmpfiles-clean.timer 默认触发点
systemctl list-timers --all | grep tmpfiles
# → systemd-tmpfiles-clean.timer (每 10 天或启动时)

/tmp/ 是 volatile tmpfs重启或定时清理后内容消失。

排查

# 1. 确认 binary 确实不在
ls -la /tmp/llama-vulkan/llama-b10679/llama-server

# 2. 确认 timer
systemctl list-timers --all | grep tmpfiles

# 3. 找替代路径
find / -name "llama-server" -type f 2>/dev/null

修复

把 systemd unit 里的 /tmp/... 路径改成持久路径

# 错误(会被清)
ExecStart=/tmp/llama-vulkan/llama-b10679/llama-server ...

# 正确(持久)
ExecStart=/home/muc/.local/bin/llama-server ...
# 或
ExecStart=/home/muc/llama.cpp/build/bin/llama-server ...

预防

任何 systemd unit 文件的 ExecStart 路径必须:

  1. 在持久文件系统上(/home//usr/local/bin/~/.local/bin/ 等)
  2. 绝不/tmp//var/tmp/$HOME/.cache/
  3. 用绝对路径,不要用相对路径

2026-09-01