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的权限:- 执行
sudo visudo打开sudoers配置文件 - 在文件末尾添加:
pi ALL=(ALL) NOPASSWD: /usr/bin/mount, /usr/bin/umount - 保存退出(按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
相关产品推荐
相关产品推荐

