1.6 KiB
1.6 KiB
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 路径必须:
- 在持久文件系统上(
/home/、/usr/local/bin/、~/.local/bin/等) - 绝不在
/tmp/、/var/tmp/、$HOME/.cache/下 - 用绝对路径,不要用相对路径
2026-09-01