近日从大佬那里抄了一段开机群晖开机自动挂载阿里云盘的代码,刚开始看的开心,晚上重启了一次发现挂载不上了。代码明明是开机启动了,但是就是没挂上。研究了下发现,手动执行代码没问题,说明不是代码的问题,那么很可能是时间差了。
挂载阿里云盘是要先创建一个阿里的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代码看着怪怪的,实在试试陌生。这篇是一个解决问题的笔记,而不是正经教程,下面是大佬教程的链接:
留下您的宝贵意见