写了个 systemd unit,手动跑脚本正常,systemd 起就找不到命令。

原因:systemd 不读 /etc/profile、.bashrc,PATH 只有默认那几个目录。

解法:

  1. 脚本里用绝对路径,不依赖 PATH
  2. 需要环境变量就写 Environment= 或 EnvironmentFile=
  3. 需要 shell 特性就显式 ExecStart=/bin/bash -lc "..."

另一个坑:WorkingDirectory 不设的话,相对路径全错。

还有 User= 要注意,不同用户的 HOME 不同,配置文件路径会变。

排查技巧:systemctl status 看错误,journalctl -u 服务名 -n 50 看详细日志。别只看 exit code,那个信息太少。

主楼