新Deepin V20 自动挂载webdav脚本webdav与nfs内外网自动切换
Deepin webdav执行环境准备:
* Deepin V20 sudo 免密码修改/etc/sudoers (admin换成你的用户名及组):
sudo visudo
#文末增加如下2行
%admin ALL=(ALL) NOPASSWD: ALL
admin ALL=(ALL) NOPASSWD: ALL
如图
ctrl + o 保存,回车,然后ctrl+x退出
执行测试,内容正确,sudo免密
sudo cat /etc/sudoers
* 新Deepin V20 自动挂载webdav脚本webdav与nfs自动切换:
sudo mkdir /opt/mount_auto_boot
sudo cd /opt/mount_auto_boot
sudo touch mount_auto_boot.sh
sudo cat mount_auto_boot.sh
sudo dedit mount_auto_boot.sh
脚本内容如下:
#!/bin/bash
#mount local share dir
#sudo /usr/bin/mount --bind /media/admin/test /home/admin/Desktop/test
if [ "$?" != "0" ];then
echo "mount local share dir fail...." >> /opt/mount_auto_boot/mount_auto_boot.log
else
echo "mount local share dir....done" >> /opt/mount_auto_boot/mount_auto_boot.log
fi
#moount net_mount_point
#随便设置两个可以ping通的ip或者地址,联网检测。
IP1="180.76.76.76"
mount_count=1
#设置net_mount_point挂载目的地址:
#nfs 共享目录,如只使用webdav请注释掉:
nfs_net_dir='/volume1/data'
#webdav配置 5005为http 5006对应https端口
web_dav_port='5005'
mnt_net_mount_point='/media/admin/net_mount_point'
sudo mkdir $mnt_net_mount_point >/dev/null 2>&1
#内外网环境
#服务器内网ip
intra_ip='10.10.10.217'
#内网网关
intra_check_ip='10.10.10.10'
#外网域名
inter_ip='nas1.proyy.com'
while true
do
df -Th|grep $mnt_net_mount_point
if [ "$?" != "0" ];then
echo "mount to $mnt_net_mount_point..........fail" >>/opt/mount_auto_boot/mount_auto_boot.log
sleep 1
ping -s 1 -c 1 $IP1 #去PING第1个IP
if [ "$?" == "0" ]
then
echo "ping $IP1 Success" >>/opt/mount_auto_boot/mount_auto_boot.log
echo `ifconfig|grep $intra_check_ip`
ifconfig|grep $intra_check_ip
if [ "$?" != "0" ];then
IPP=$inter_ip
else
IPP=$intra_ip
fi
echo "当前检测访问点:"$IPP
ping -s 1 -c 2 $IPP #去PING第2个IP
if [ "$?" != "0" ];then
echo "ping $IPP ERROR" >>/opt/mount_auto_boot/mount_auto_boot.log
else
echo "ping $IPP SUCCESS,mount to $mnt_net_mount_point.........." >>/opt/mount_auto_boot/mount_auto_boot.log
echo "start monut $IPP"
echo .
echo "$IPP <<===???===>> $intra_ip"
if [ "$IPP" == "$intra_ip" ];then
#内网环境下自动去挂载nfs共享目录,如不使用nfs,也可直接用webdav,2选1:
#nfs
#设置net_mount_point地址:
#net_mount_point="$IPP:$nfs_net_dir"
#sudo mount -t nfs $net_mount_point $mnt_net_mount_point
#webdav,5005为http 5006对应https端口
net_mount_point="http://$IPP:$web_dav_port"
sudo mount -t davfs $net_mount_point $mnt_net_mount_point
else
#外网环境通过域名挂载,5005为http 5006对应https端口
net_mount_point="http://$IPP:$web_dav_port"
sudo mount -t davfs $net_mount_point $mnt_net_mount_point
fi
echo "checking........."
sleep 3
df -Th|grep $net_mount_point
if [ "$?" != "0" ];then
echo "mount $net_mount_point..........fail" >>/opt/mount_auto_boot/mount_auto_boot.log
continue
else
echo "mount_count:$mount_count"
echo "mount $net_mount_point..........done" >>/opt/mount_auto_boot/mount_auto_boot.log
df -Th|grep $net_mount_point >>/opt/mount_auto_boot/mount_auto_boot.log
echo "mount_count:$mount_count" >>/opt/mount_auto_boot/mount_auto_boot.log
break
fi
fi
else
echo "ping $IP1 ERROR"
mount_count=$[$mount_count+1]
sleep 5 #设置多长时间去PING一次
continue
fi
else
echo "mount_count:$mount_count"
echo "mount $net_mount_point..........done" >>/opt/mount_auto_boot/mount_auto_boot.log
df -Th|grep $net_mount_point >>/opt/mount_auto_boot/mount_auto_boot.log
echo "mount_count:$mount_count" >>/opt/mount_auto_boot/mount_auto_boot.log
break
fi
done
exit 0
ctrl+s保存并退出
脚本结束
* Deepin V20 webdav自动启动:
方式1、通过autostart文件创建.desktop执行脚本:
sudo cd /home/admin/.config/autostart
sudo touch mount_auto_boot.desktop
sudo dedit mount_auto_boot.desktop
[Desktop Entry]
Type=Application
Exec="sudo /opt/mount_auto_boot/mount_auto_boot.sh"
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name[en_IN]=mount-auto
Name=mount-auto
Comment[en_IN]=mount-auto
Comment=mount-auto
方式2、通过定时任务实现开机60秒后尝试执行脚本挂载:
crontab -l
crontab -e
增加一行内容如下:
@reboot sleep 60 ; /opt/mount_auto_boot/mount_auto_boot.sh
方式3、脚本下一次优化实现自动注册自启,也期待网友提更多建议.
热心网友问题:
主要问题:
1.挂载成功后没多久,再访问目录就是
无法访问’/mnt/webdav’: 传输端点尚未连接、
- 访问失败后无法再次挂载
重复刷新以下内容:
次要问题:
- 当日挂载时使用autostart目录未能成功开机自启
- autostart中desktop文件,启动时似乎没有管理员权限,无法操作系统目录
- 关于autostart目录未能自启,我尝试了很多方法根据这篇文章:https://wiki.deepin.org/wiki/%E8%87%AA%E5%90%AF%E5%8A%A8%E7%A8%8B%E5%BA%8F
但不知是由于什么原因都未能成功,最后是使用注册服务才成功自启动
问题回复:
- 传输端点尚未连接:尝试强制卸载并删除挂载点.
sudo mount -l /mnt/webdav
sudo rm -rf **/mnt/webdav
- 访问失败循环问题实则是脚本逻辑问题,重新覆盖一下脚本即可.
次要问题:
- 当日挂载时使用autostart目录未能成功开机自启
新脚本采用cron重启后60秒自动启动脚本,不采用autostart,因为开机启动存在网络问题,后期可以在脚本再增加网络连接判断.
- autostart中desktop文件,启动时似乎没有管理员权限,无法操作系统目录
可以用+sudo 成功启动,但是后面我修改了,没有再用autostart,你可以继续用.使用sudo
新方法脚本如上
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END