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

Raspbian系统下Bash自启动脚本无法从共享文件夹复制文件问题

问题

在运行Raspbian(Debian GNU/Linux 11 (bullseye))的设备中,我添加了一个启动Bash脚本SysmacApp.sh,功能包括创建指定目录、挂载CIFS共享文件夹//10.10.0.1/SysmacApp到/home/pi/App、复制共享文件到本地、卸载挂载,最后运行两个dotnet程序。

脚本内容如下:

#!/bin/bash

if [ ! -d /home/pi/App ]; then
  mkdir -p /home/pi/App;
fi

if [ ! -d /home/pi/Shared/Service ]; then
  mkdir -p /home/pi/Shared/Service;
fi

if [ ! -d /home/pi/Shared/Service/Data ]; then
  mkdir -p /home/pi/Shared/Service/Data;
fi

if [ ! -d /home/pi/Shared/Sysmac ]; then
  mkdir -p /home/pi/Shared/Sysmac;
fi

sudo mount -t cifs //10.10.0.1/SysmacApp /home/pi/App -o username=*****,password=*****
cp /home/pi/App/Service/* /home/pi/Shared/Service -r
cp /home/pi/App/Sysmac/* /home/pi/Shared/Sysmac -r
cp /home/pi/App/Shared/* /home/pi/Shared  
sudo umount /home/pi/App

cd /home/pi/Shared/Service
dotnet ./SysmacService.dll &
sleep 2
cd /home/pi/Shared/Sysmac
dotnet ./SysmacUI.Skia.Gtk.dll &

我通过在/etc/xdg/autostart目录下添加SysmacApp.desktop文件配置自启动,文件内容:

[Desktop Entry]
Name=SysmacApp
Comment=Starts sysmac application
Exec=/home/pi/Shared/SysmacApp.sh
Terminal=true
Type=Application
Categories=Utility;Application;

重启设备后,两个dotnet程序能正常运行,但共享文件夹内的文件并未被复制到本地,只有手动在终端执行脚本时才能完成文件复制。请问哪里操作有误?

排查与解决方法

1. 网络未就绪导致挂载失败

自启动脚本在桌面环境启动初期运行,此时网络可能还未完全连接,mount命令未成功挂载共享文件夹,后续复制操作自然无法执行。

  • 解决:在mount前添加延迟,或挂载后检查挂载状态:
    方法一:添加延迟(根据网络环境调整时长)
    sleep 10
    sudo mount -t cifs //10.10.0.1/SysmacApp /home/pi/App -o username=*****,password=*****
    
    方法二:检查挂载状态,确认成功后再复制
    sudo mount -t cifs //10.10.0.1/SysmacApp /home/pi/App -o username=*****,password=*****
    if ! mountpoint -q /home/pi/App; then
        echo "挂载失败" >> /home/pi/SysmacApp.log
        exit 1
    fi
    # 后续执行复制命令
    

2. sudo无交互权限导致挂载失败

手动执行脚本时可输入sudo密码,但自启动环境无交互,mount命令因缺少密码被终止。

  • 解决:给pi用户添加无需密码执行mount和umount的权限:
    1. 执行sudo visudo打开sudoers配置文件
    2. 在文件末尾添加:
      pi ALL=(ALL) NOPASSWD: /usr/bin/mount, /usr/bin/umount
      
    3. 保存退出(按Ctrl+O,回车确认,再按Ctrl+X)

3. 复制命令或权限问题

  • 若共享文件夹中Shared目录不存在,cp /home/pi/App/Shared/* /home/pi/Shared会报错,修改为cp -r /home/pi/App/Shared /home/pi/,避免单文件匹配失败。
  • 挂载时指定pi用户权限,确保能读取共享文件:
    sudo mount -t cifs //10.10.0.1/SysmacApp /home/pi/App -o username=*****,password=*****,uid=pi,gid=pi
    

4. 添加日志定位问题

在脚本开头添加日志输出,方便排查执行过程中的错误:

exec > /home/pi/SysmacApp.log 2>&1
# 后续所有命令的输出都会写入该日志,重启后执行 cat /home/pi/SysmacApp.log 查看详情

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 01:32:16