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

树莓派3B+通过cron定时控制USB端口通断的脚本运行报错排查

报错根因定位

你当前遇到的tee: /sys/bus/usb/drivers/usb/unbind: No such device报错,核心原因如下:

  • 尝试执行unbind操作的USB节点1-1本来就已经处于解绑断开状态,大概率是之前手动执行过关闭USB的命令,系统里已经不存在这个绑定节点,自然会抛出无对应设备的错误
  • 脚本逻辑和文件名不匹配:命名为usb-on.sh的脚本实际写的是关闭USB的unbind命令,功能完全错位
  • 脚本末尾残留了一个多余的反引号字符,会造成shell解析异常
  • 已经用sudo提权执行全脚本的情况下,管道内嵌套sudo会造成sysfs路径解析异常
修复步骤

1. 先确认实际USB节点名称

不要硬套网上的通用节点名,先执行命令查看当前系统里的USB绑定节点:
ls /sys/bus/usb/drivers/usb/ | grep -E '^[0-9]-[0-9.]+$'
如果输出的节点不是1-1(比如实际是1-1.1这类带后缀的名称),后续所有脚本里的节点名称要替换成你实际查到的值。

2. 重写带状态判断的双脚本

规避无意义的状态操作报错,分别对应开启、关闭USB的功能:

开启USB脚本(usb-on.sh)

#! /bin/sh
# 开启USB端口供蜂窝dongle通信
USB_NODE="1-1"
# 仅当节点未绑定(USB处于关闭状态)时执行bind操作
if [ ! -d "/sys/bus/usb/drivers/usb/$USB_NODE" ]; then
  echo "$USB_NODE" > /sys/bus/usb/drivers/usb/bind
  # 预留2秒等待USB dongle完成硬件初始化
  sleep 2
  echo "USB端口已开启"
else
  echo "USB端口已处于开启状态,无需重复操作"
fi

关闭USB脚本(usb-off.sh)

#! /bin/sh
# 关闭USB端口降低待机功耗
USB_NODE="1-1"
# 仅当节点处于绑定状态(USB处于开启状态)时执行unbind操作
if [ -d "/sys/bus/usb/drivers/usb/$USB_NODE" ]; then
  echo "$USB_NODE" > /sys/bus/usb/drivers/usb/unbind
  echo "USB端口已关闭"
else
  echo "USB端口已处于关闭状态,无需重复操作"
fi

3. 基础配置校验

  • 给两个脚本加可执行权限:
    chmod +x /home/pi/usb-on.sh /home/pi/usb-off.sh
  • 测试执行时直接用root权限运行脚本即可,不需要在脚本内部的命令再嵌套sudo
  • 注意:树莓派3B+的板载以太网控制器与USB端口共享同一套内部USB通路,执行unbind操作会同时切断板载以太网连接,如果你的远程管理依赖板载以太网,需要提前确认蜂窝dongle的通信链路优先级,避免执行关闭命令后设备彻底断连
Crontab定时调度配置

因为操作sysfs节点需要root权限,直接编辑root用户的crontab规则,不要使用普通用户的crontab:
sudo crontab -e
参考定时逻辑:每小时整点开启USB供dongle上传照片,等待3分钟传输完成后自动关闭USB降低功耗

# 每小时整点开启USB端口
0 * * * * /home/pi/usb-on.sh
# 每小时过3分钟关闭USB端口
3 * * * * /home/pi/usb-off.sh

注意所有脚本路径要写绝对路径,避免crontab环境下找不到脚本文件。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 01:24:02