新Deepin V20 自动挂载webdav脚本webdav与nfs内外网自动切换

新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’: 传输端点尚未连接、

  1. 访问失败后无法再次挂载

重复刷新以下内容:

次要问题:

  1. 当日挂载时使用autostart目录未能成功开机自启
  2. autostart中desktop文件,启动时似乎没有管理员权限,无法操作系统目录
  3. 关于autostart目录未能自启,我尝试了很多方法根据这篇文章:https://wiki.deepin.org/wiki/%E8%87%AA%E5%90%AF%E5%8A%A8%E7%A8%8B%E5%BA%8F

但不知是由于什么原因都未能成功,最后是使用注册服务才成功自启动

问题回复:

  1. 传输端点尚未连接:尝试强制卸载并删除挂载点.
sudo mount -l  /mnt/webdav
sudo rm -rf **/mnt/webdav
  1. 访问失败循环问题实则是脚本逻辑问题,重新覆盖一下脚本即可.

次要问题:

  1. 当日挂载时使用autostart目录未能成功开机自启

新脚本采用cron重启后60秒自动启动脚本,不采用autostart,因为开机启动存在网络问题,后期可以在脚本再增加网络连接判断.

  1. autostart中desktop文件,启动时似乎没有管理员权限,无法操作系统目录

可以用+sudo 成功启动,但是后面我修改了,没有再用autostart,你可以继续用.使用sudo

新方法脚本如上

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享