绝对路径缺失是crontab任务静默失败最常见原因;cron不继承shell环境,path极简(通常仅/usr/bin:/bin),需用which或command-v查命令真实路径,并在crontab中使用绝对路径或显式声明path。

绝对路径缺失是 crontab 任务静默失败最常见原因之一。cron 不继承你的 shell 环境,PATH 极其有限(通常只有 /usr/bin:/bin),你在终端里能直接敲的命令,比如 python3、node、mysqldump、jq,在 cron 里大概率找不到。
确认 cron 实际使用的 PATH
在 crontab 中加一行临时测试:
* * * * * env > /tmp/cron_env.txt 2>&1- 等一分钟,执行
cat /tmp/cron_env.txt - 重点看
PATH=...这一行——基本就是/usr/bin:/bin,没有/usr/local/bin、/home/user/.local/bin或你自定义的路径
用 which 或 command -v 找出命令真实路径
不要猜,要实测:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 在终端运行
which python3→ 得到/usr/bin/python3 - 运行
which mysqldump→ 可能是/usr/bin/mysqldump或/usr/local/mysql/bin/mysqldump - 运行
command -v node→ 如果返回空,说明没装或不在 PATH 中;有返回就取那个完整路径 - 脚本里调用的其他工具(如
curl、wget、date)也建议统一用绝对路径,避免隐性依赖
在 crontab 中显式声明 PATH 或直接写死路径
两种方式都有效,推荐后者更稳妥:
-
方式一(推荐):全用绝对路径
把0 2 * * * python3 /home/user/backup.py改成0 2 * * * /usr/bin/python3 /home/user/backup.py -
方式二:在 crontab 开头设置 PATH
用crontab -e编辑,在第一行添加:PATH=/usr/local/bin:/usr/bin:/bin:/home/user/.local/bin
注意:这仅对当前用户的 crontab 生效,且不能包含空格或特殊字符
检查脚本内部是否也用了相对路径
即使 crontab 条目路径正确,脚本自己也可能出问题:
- Python 脚本中用
open("config.json")→ 当前工作目录是 cron 启动时的默认路径(通常是用户家目录,但不可靠) - R 脚本中用
source("utils.R")→ 同样依赖当前路径,容易失败 - 解决方法:脚本开头主动切换到自身所在目录,例如 Python 中加:
import os; os.chdir(os.path.dirname(os.path.abspath(__file__))) - 或者所有文件路径都写成绝对路径,比如
/home/user/config.json










