| 场景 | 脚本手动可跑,cron 报命令找不到 |
|---|---|
| 根因 | cron PATH 极简且不读 profile |
| 修复 | 声明 PATH / 绝对路径 / 专用 env 文件 |
复现与定位
复现与定位
# 临时加一条,观察 cron 真实环境(用完删除)
* * * * * env > /tmp/cron-env.txt
cat /tmp/cron-env.txt
# 守护日志里确认报错
journalctl -u crond -n 20 --no-pager | tail
grep CRON /var/log/syslog | tail -n 10三种修复
三种修复
# ① crontab 顶部声明
PATH=/usr/local/bin:/usr/bin:/bin
# ② 任务里用绝对路径
0 2 * * * /usr/bin/python3 /opt/app/job.py
# ③ 脚本内加载专用环境
. /etc/app/env.sh
/opt/app/run.shjava/node 等运行时同样查绝对路径;多版本环境下先 which -a 出真实路径再写进任务。