You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cron作业无法找到ADB二进制文件的问题排查求助

解决Cron执行Python脚本时找不到ADB的问题

核心原因

Cron的运行环境和用户登录shell的环境变量差异极大,默认PATH范围非常有限,且默认使用/bin/sh而非bash,导致你之前的环境变量配置无法正确生效。此外你之前的部分Cron命令写法存在逻辑错误,比如把ADB路径当成Python脚本的执行器,完全不符合语法要求。

有效解决方案

1. 直接在Python脚本中指定ADB绝对路径

这是最可靠的方案,彻底绕开Cron的环境变量问题:
打开inventory_driver.py,找到所有调用ADB的代码(比如subprocess调用的部分),把adb替换为完整的绝对路径:

# 原代码示例
import subprocess
subprocess.run(["adb", "devices"])

# 修改后
adb_full_path = "/home/<>/resources/AndroidTools/android-sdk-linux/platform-tools/adb"
subprocess.run([adb_full_path, "devices"])

这样不管Cron的PATH是什么,脚本都能直接定位到ADB二进制文件。

2. 正确在Cron中配置PATH并使用绝对路径调用脚本

Cron中设置PATH要放在任务的上方,同时脚本路径必须用绝对路径(避免~解析异常):
编辑你的crontab(执行crontab -e),写入:

# 配置包含ADB的PATH,同时保留系统默认PATH避免其他命令找不到
PATH=/usr/bin:/bin:/home/<>/resources/AndroidTools/android-sdk-linux/platform-tools
# 每日清晨6点执行,输出日志到文件方便排查问题
0 6 * * * python3 /home/你的用户名/.lab_inventory/inventory_driver.py > /var/log/inventory_script.log 2>&1

注意:替换你的用户名为实际用户名,日志路径要确保当前用户有写入权限。

3. 用bash明确加载用户环境执行脚本

如果你的.bashrc里已经正确配置了ADB的PATH,可以让Cron调用bash并加载用户环境:

0 6 * * * bash -c "source /home/你的用户名/.bashrc && python3 /home/你的用户名/.lab_inventory/inventory_driver.py" > /var/log/inventory_script.log 2>&1

这种方式会让bash加载你的用户环境变量,确保ADB的PATH被正确识别。

4. 修复错误的Cron命令写法

你之前写的/home/<>/.../adb python3 ...是完全错误的,这是试图用ADB二进制文件去执行Python脚本,逻辑上不成立,必须删除ADB路径部分,只保留Python脚本的调用命令。

内容的提问来源于stack exchange,提问作者Noctrim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 18:55:07