wordpress定制

当前位置: HOME > 黑群晖 > 解决群晖自动rclone挂载阿里云盘时间差问题

建站,优化,推广

解决群晖自动rclone挂载阿里云盘时间差问题

近日从大佬那里抄了一段开机群晖开机自动挂载阿里云盘的代码,刚开始看的开心,晚上重启了一次发现挂载不上了。代码明明是开机启动了,但是就是没挂上。研究了下发现,手动执行代码没问题,说明不是代码的问题,那么很可能是时间差了。

挂载阿里云盘是要先创建一个阿里的webdav盘,然后再通过下面代码保存在一个叫rcloned的文件,在开群晖的计划任务中执行开机启动的条件任务bash /root/rcloned start挂载, rcloned 代码如下:

#!/bin/bash
### BEGIN INIT INFO
# Provides:          rclone
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start rclone at boot time
# Description:       Enable rclone by daemon.
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

REMOTE='aliyunpan:/影视'
LOCAL='/volume1/video/aliyunpan_video'
CONFIG='/root/.config/rclone/rclone.conf'
DEMO='rclone'

[ -n "$REMOTE" ] || exit 1;
[ -x "$(which fusermount)" ] || exit 1;
[ -x "$(which $DEMO)" ] || exit 1;

case "$1" in
start)
  ps -ef |grep -v grep |grep -q "$REMOTE"
  [ $? -eq '0' ] && {
    DEMOPID="$(ps -C $DEMO -o pid= |head -n1 |grep -o '[0-9]\{1,\}')"
    [ -n "$DEMOPID" ] && echo "$DEMO already in running.[$DEMOPID]";
    exit 1;
  }
  fusermount -zuq $LOCAL >/dev/null 2>&1
  mkdir -p $LOCAL
  rclone mount $REMOTE $LOCAL --config $CONFIG --copy-links --no-gzip-encoding --no-check-certificate --allow-other --allow-non-empty --umask 000 >/dev/null 2>&1 &
  sleep 3;
  DEMOPID="$(ps -C $DEMO -o pid=|head -n1 |grep -o '[0-9]\{1,\}')"
  [ -n "$DEMOPID" ] && {
    echo -ne "$DEMO start running.[$DEMOPID]\n$REMOTE --> $LOCAL\n\n"
    echo 'ok' >/root/ok
    exit 0;
  } || {
    echo "$DEMO start fail! "
    exit 1;
  }
  ;;
stop)
  DEMOPID="$(ps -C $DEMO -o pid= |head -n1 |grep -o '[0-9]\{1,\}')"

以上代码来源于:https://wp.gxnas.com/10791.html

我重启的时候,webdav是由docker生成的,而这个rcloned文件是开机马上就启动,这会导致挂载阿里网盘的时候没有可以用的webdav从而失败。

解决方法:webdav创建的时候,会自动更新token文件,根据token文件生成时间判断是否完成了更新,就可以了。以下是我实现判断的代码,放上面代码前面就好。

function whether_changed(){
    local file_path=/volume1/docker/aliyunpan_webdav/refresh-token
    local check_time=1s
    timestamp=`date +%s`
    while [[ true ]]; do
        sleep ${check_time}
        filetimestamp=`stat -c %Y $file_path`
        timecha=$[$timestamp - $filetimestamp]
        if [ $timecha -lt 40 ]; then
            echo "token已更新执行挂载"
            break
        else
            echo "token未更新请等待"
        fi
    done
}
whether_changed

shell代码看着怪怪的,实在试试陌生。这篇是一个解决问题的笔记,而不是正经教程,下面是大佬教程的链接:

https://wp.gxnas.com/10791.html

留下您的宝贵意见

您的电子邮箱地址不会被公开。

12341