前言
折腾自动追剧的全家桶方案其实已经有一段时间了,由于 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
搞定,收工!
这代码样式看着舒服,改天我也换个皮肤玩玩..
请教一下,dir1和dir2分别是什么目录?
如果是rclone mount挂载,命令中第一个目录是远程目录,第二个目录是本地的空目录,那在挂载前,连个目录都是空的,也是相等的,还是会导致重启吧?
上面的代码,我理解为dir1是Docker的宿主机映射目录,dir2是挂载目录,你是把挂载的目录在系统内又映射了一次吗?
更正:
上文中是“两个目录”不是“连个目录”