Plainnotes

cron 里跑脚本,环境变量和你想的不一样

2026-08-22 · 2 分钟工具

脚本在终端里跑得好好的,放进 crontab 就报 command not found、或者 python 找不到包。

cron 的环境极简:PATH 通常只有 /usr/bin:/bin,SHELL 是 /bin/sh,不读 .bashrc、.profile,也没有 LANG。

三个办法,按推荐顺序:

一,脚本里写绝对路径,别依赖 PATH。

二,在 crontab 顶部显式声明:

PATH=/usr/local/bin:/usr/bin:/bin
SHELL=/bin/bash
LANG=en_US.UTF-8

三,实在需要复杂环境,用 bash -lc 'source /etc/profile; ...' 包一层。但 -l 会读登录脚本,可能带来别的副作用。

排查时最快的办法是在脚本第一行加 env > /tmp/cron-env.txt,跑一次,和交互式 shell 的 env 对比。