依赖rclone挂载的容器因为vps重启引起的目录读取失败
侧边栏壁纸
  • 累计撰写 17 篇文章
  • 累计收到 519 条评论

依赖rclone挂载的容器因为vps重启引起的目录读取失败

syqman
2022-06-03 / 3 评论 / 540 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2022年06月06日,已超过682天没有更新,若内容或图片失效,请留言反馈。
前言

  折腾自动追剧的全家桶方案其实已经有一段时间了,由于 docker的强大,本人的全家桶方案基本都是依赖于 docker实现的,但是随之而来也暴露一个问题,就是部分容器是依赖于 rclone 挂载实现的功能,一旦重启 VPS 的话, rlone mount 服务的启动完成需要一定的时间,这时候如果 docker 容器服务比 rclone mount 服务先启动的话,会出现容器识别不到挂载目录的情况,即便 rclone mount 服务最后完成启动也不行,此时的解决方案只有重启 docker 容器。之前一直没尝试解决的原因是,觉得碰到这种情况下重启下容器就好,加上大佬们总是不理解说为啥你的 VPS 老是要重启,我觉得这个问题只有小白能和我感同身受了 表情

解决方案

  解决方案其实也很简单,只需要一个脚本,我们让他开机启动的是检测下你的挂载目录是否有内容,一旦有内容的话,则重启 docker 容器,如果没内容的话,则循环检测,直到 rclone 挂载成功。当然,脚本简单归简单,我自己可写不出来,这里仍然贴下 翔翎 大佬的作品:

#!/bin/bash
dir1=/mnt/sp01
dir2=/mnt/onedrive
while true; do
    sleep 5s
    if [[ -d $dir1 ]] && [[ -d $dir2 ]]; then
        if [[ `ls $dir1` != "" ]] && [[ `ls $dir2` != "" ]]; then
            docker restart emby
            docker restart nas-tools
            docker restart chinesesubfinder
            break
        else
            echo "No path!"
        fi
    fi
done

保存为 rclone.sh 上传到 VPS 根目录,给与权限

chmod +x rclone.sh

手动执行下看有无报错:

bash rclone.sh

如提示 docker restart emby done 等字样,表示脚本无问题。
加入开机启动,首先将脚本移动到 /etc/init.d并设置开机启动 :

mv rclone.sh /etc/init.d
sudo update-rc.d rclone.sh defaults

如果要移除启动项的话:

sudo update-rc.d -f rclone.sh remove

搞定,收工!

0

评论 (3)

取消
  1. 头像
    bpking
    Windows 10 · Google Chrome

    这代码样式看着舒服,改天我也换个皮肤玩玩..

    回复
  2. 头像
    kikikiki
    MacOS · Google Chrome

    请教一下,dir1和dir2分别是什么目录?
    如果是rclone mount挂载,命令中第一个目录是远程目录,第二个目录是本地的空目录,那在挂载前,连个目录都是空的,也是相等的,还是会导致重启吧?
    上面的代码,我理解为dir1是Docker的宿主机映射目录,dir2是挂载目录,你是把挂载的目录在系统内又映射了一次吗?

    回复
    1. 头像
      kikikiki
      MacOS · Google Chrome
      @ kikikiki

      更正:
      上文中是“两个目录”不是“连个目录”

      回复