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

树莓派Bash脚本手动运行正常但作为Cronjob无法执行如何解决

排查与解决方向
  • 修正crontab的PATH配置:PATH变量仅用于存放可执行命令的目录,不可写入单个脚本路径,将crontab开头的PATH配置修改为:
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    
  • 配置sudo免密权限:cron运行在非交互环境下,无法输入sudo密码,需要给pi用户配置脚本内用到的rsync、cp命令的免密权限。执行sudo visudo,在文件末尾添加如下内容后保存退出:
    pi ALL=(ALL) NOPASSWD: /usr/bin/rsync, /usr/bin/cp
    
  • 脚本内统一使用绝对路径:cron的默认工作目录为执行用户的家目录,相对路径会导致文件读写异常,将脚本内的davislog.log修改为绝对路径,修改后的脚本参考:
    #!/bin/bash
    dt=$(date '+%d-%m-%Y_%H-%M-%S');
    sudo rsync -a -v /home/pi/davisbot/audio/ /mnt/resources/davisbot_audios/ --log-file=/home/pi/davislog.log
    sudo cp -rv /home/pi/davislog.log /mnt/resources/davisbot_audios/"$dt"davislog.log
    
  • 确认脚本执行权限:执行chmod +x /home/pi/davisbackup.sh确保脚本具备可执行权限。
  • 采集cron执行日志定位问题:将crontab任务修改为如下内容,把执行的输出和错误日志都写入本地文件,方便排查具体报错:
    * * * * * /home/pi/davisbackup.sh >> /home/pi/cron_backup_debug.log 2>&1
    
    等待1分钟后查看/home/pi/cron_backup_debug.log的内容,即可看到任务执行的具体错误信息。也可执行grep CRON /var/log/syslog查看系统层面的cron运行日志。
  • 验证SMB挂载可用性:确认/mnt/resources的挂载对pi用户开放读写权限,且cron触发时挂载处于生效状态,可在脚本开头添加挂载检测逻辑,避免挂载未就绪导致备份失败:
    # 检测挂载点是否生效,未生效则先执行挂载
    if ! mountpoint -q /mnt/resources; then
        sudo mount /mnt/resources
    fi
    
    若添加了mount命令,需要在之前的sudo免密配置中补充/usr/bin/mount的权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:15:00