ZeroTermux 中文文档 下载 App

环境变量与工作目录——脚本定时任务不跑的隐形元凶

为什么会不一样

不同运行环境的环境变量和工作目录不同:

场景工作目录PATH
手动在终端执行你当前 cd 到的目录完整 PATH(包含 ~/.bashrc 里的追加)
start_command.sh 启动脚本~默认 PATH(可能没读 .bashrc)
定时任务可能是 ~ 或其他最小化 PATH,不包含你 .bashrc 里加的路径
发行版(proot)proot 指定的目录发行版自己的 PATH
从开机自启 app 触发/几乎空 PATH

统一解法:用绝对路径

最通用的解法——命令和文件路径都写完整路径,不依赖 PATH 和工作目录。

# 命令用完整路径
/data/data/com.termux/files/usr/bin/python /data/data/com.termux/files/home/task.py

# 文件也用完整路径
cat /data/data/com.termux/files/home/logs/task.log

脚本开头补 PATH

如果你觉得每条命令都写完整路径太啰嗦,在脚本开头补 PATH:

#!/data/data/com.termux/files/usr/bin/bash
export PATH=/data/data/com.termux/files/usr/bin:/data/data/com.termux/files/usr/local/bin:$PATH

# 后面就可以写短路径命令了
python task.py
git pull

定时任务的特殊处理

ZeroTermux 的定时任务(~/.timerdir/ 下的脚本)运行在一个极简环境里:

建议在每个定时任务脚本开头:

#!/data/data/com.termux/files/usr/bin/bash

# 1. 设置 PATH
export PATH=/data/data/com.termux/files/usr/bin:/data/data/com.termux/files/usr/local/bin:$PATH

# 2. cd 到预期目录
cd /data/data/com.termux/files/home/my-project || exit 1

# 3. 执行你的任务
python backup.py >> /data/data/com.termux/files/home/logs/backup.log 2>&1

用 2>&1 把 stderr 也重定向到日志文件,出问题能看到完整错误信息。

发行版里的 PATH

proot 发行版一般会设置好自己的 PATH(比如 Debian 发行版的 PATH 是 /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin),和 ZeroTermux 原生 PATH 不同。如果你在发行版里还想调用 ZeroTermux 的命令,需要在发行版里显式挂载 Termux 的 PREFIX 路径。

自检方法

脚本写好后不要直接塞进定时任务或启动脚本,先手动跑:

# 在普通终端里测试
bash -x 你的脚本.sh

bash -x 会把执行的每条命令打印出来,方便排查哪里出问题。