2018.5.29 23:55更新:修改安装顺序,避免出现bug;修改autoupload.sh内容,实现上传+删除本地文件同时管理。
研究了接近三个月的离线下载,网上的教程或多或少有一些或者几乎全部都是错的,不知道是过期了还是怎么了。还好,至少给了我一个大方向,经过不懈的努力,我最终还是实现了这个离线下载到Onedrive中的功能。
在研究的过程中无意发现了Rclone自带的sync功能,因此,本篇文章将用两种方法实现自动上传,并做对比。
搭建环境:Docker环境,镜像:
rastasheep/ubuntu-sshd
其中,该镜像的环境是
ubuntu-sshd-910292714-kpnx7 4.4.0-72-generic
用户名、密码均为:root
需要开放的端口包括:22、80、6800,但不限于以上端口。
安装AriaNG
本文采用的是Apache网络服务器安装。
打开Shell终端,连接VPS:
安装依赖:
apt-get update
apt-get install -y vim unzip screen fuse
下载并安装Apache2.0:
apt-get -y install apache2
/etc/init.d/apache2 start
此时打开VPS的ip应该能看到Apache的默认页面了。
其中Apache2.0的默认网页文件根目录位于/var/www
,配置文件位于/etc/apache2/apache2.conf
停止Apache2.0:/etc/init.d/apache2 stop
下载并安装AriaNG
cd /var/www/html
wget https://github.com/mayswind/AriaNg/releases/download/0.4.0/aria-ng-0.4.0.zip
unzip aria-ng-0.4.0.zip
注意,中间有一个index.html提示的提示,选"y"即可。
root@ubuntu-sshd-910292714-v1kbc:/var/www/html# unzip aria-ng-0.4.0.zip
Archive: aria-ng-0.4.0.zip
creating: css/
inflating: css/aria-ng-aed476e868.min.css
inflating: css/bootstrap-3.3.7.min.css
inflating: css/plugins-a7090b9582.min.css
creating: fonts/
inflating: fonts/fontawesome-webfont.eot
inflating: fonts/fontawesome-webfont.svg
inflating: fonts/fontawesome-webfont.ttf
inflating: fonts/fontawesome-webfont.woff
inflating: fonts/fontawesome-webfont.woff2
creating: js/
inflating: js/angular-packages-1.6.5.min.js
inflating: js/aria-ng-32e6c713b1.min.js
inflating: js/bootstrap-3.3.7.min.js
inflating: js/echarts-common-3.7.1.min.js
inflating: js/jquery-2.2.4.min.js
inflating: js/moment-with-locales-2.18.1.min.js
inflating: js/plugins-7eed010b9e.min.js
creating: langs/
inflating: langs/zh_Hans.txt
inflating: langs/zh_Hant.txt
inflating: favicon.ico
inflating: favicon.png
replace index.html? [y]es, [n]o, [A]ll, [N]one, [r]ename: y #选择“y”即可。
inflating: index.html
inflating: index.manifest
inflating: LICENSE
inflating: robots.txt
inflating: tileicon.png
inflating: touchicon.png
完成后,浏览器打开你的ip地址,按下crtl+F5
就可以看到AriaNG面板了,但是我们还没有安装Aria2,因此现在还无法连接。
安装并配置Aria2
安装Aria2
回到Root目录下:
cd /root
一条命令即可:
apt-get -y install aria2
配置Aria2
需要自行新建配置文件:
mkdir /root/.aria2
touch /root/.aria2/aria2.session
touch /root/.aria2/aria2.log
touch /root/.aria2/aria2.conf
其中,aria2.session为下载信息文件,aria2.log为日志文件。这两个文件不用管。
需要编辑的是aria2.conf,这是aria2的配置文件。
vi /root/.aria2/aria2.conf
按下i
,写入下列信息:
## '#'开头为注释内容, 选项都有相应的注释说明, 根据需要修改 ##
## 被注释的选项填写的是默认值, 建议在需要修改时再取消注释 ##
## 文件保存相关 ##
# 文件的保存路径(可使用绝对路径或相对路径), 默认: 当前启动位置
dir=/root/download/
# 启用磁盘缓存, 0为禁用缓存, 需1.16以上版本, 默认:16M
disk-cache=32M
# 文件预分配方式, 能有效降低磁盘碎片, 默认:prealloc
# 预分配所需时间: none < falloc ? trunc < prealloc
# falloc和trunc则需要文件系统和内核支持
# NTFS建议使用falloc, EXT3/4建议trunc, MAC 下需要注释此项
file-allocation=none
# 断点续传
continue=true
## 下载连接相关 ##
# 最大同时下载任务数, 运行时可修改, 默认:5
max-concurrent-downloads=10
# 同一服务器连接数, 添加时可指定, 默认:1
max-connection-per-server=5
# 最小文件分片大小, 添加时可指定, 取值范围1M -1024M, 默认:20M
# 假定size=10M, 文件为20MiB 则使用两个来源下载; 文件为15MiB 则使用一个来源下载
min-split-size=10M
# 单个任务最大线程数, 添加时可指定, 默认:5
split=20
# 整体下载速度限制, 运行时可修改, 默认:0
#max-overall-download-limit=0
# 单个任务下载速度限制, 默认:0
#max-download-limit=0
#下载完成后自动执行root目录下的autoupload.sh脚本
on-download-complete=/root/autoupload.sh
编辑完成后,按下Esc
,输入:wq
并按下回车保存并退出编辑。
至此,aria2的配置已经完成,但是我们并不能立即启动aria2,因为还没有配置root目录下的autoupload.sh脚本。
自动上传至Onedrive
这里,我分了两个方法进行上传,一种是我自己琢磨的,一种是从另一个博客那里扒来的脚本。
二者任选其一都可以实现功能,我在后面会有评测。
我的配置方法
vi /root/autoupload.sh
输入以下内容:
rclone sync source:path dest:path
或者,换成:
rclone move source:path dest:path
其中:
source:path 是你的Aria2下载目录,在这里就是/root/download
dest:path dest是你用rclone挂载的网盘名称(自定义的名称),path是网盘文件的绝对路径。
sync
与move
的区别在于,sync
同步完成后,本地文件依然存在于下载目录;而move
同步完成后,本地文件消失不见。同时,如果先删除本地文件再用sync
,那么云端的文件将会被一起删除;如果删除了本地文件再进行move
动作,云端文件不会被删除。所以,这里推荐使用move
。
比如,我想将下载目录(/root/download)里面的文件上传到网盘(名称为grive1)的“VPS”文件夹,这时应该写入:
rclone sync /root/download grive1:/VPS
或者
rclone move /root/download grive1:/VPS
写入后,给予脚本执行命令的权限:
chmod 777 /root/autoupload.sh
然后,用screen启动aria2:
screen -dmS aria2 aria2c --enable-rpc --rpc-listen-all=true --rpc-allow-origin-all -c
这样,再打开你的ip地址,就可以成功连接你的aria,并实现下载后自动上传到Onedrive中了。
来自楚盟网的某大佬脚本
这里提前说明一下,类似该大佬的脚本网上非常多,但是该大佬的脚本是我用过的最好的脚本,不吹不黑。
在这个方法里面,需要提前将已经连接的Onedrive映射为本地的一个文件夹。
#新建本地文件夹,路径自己定,即下面的LocalFolder
mkdir /root/OneDrive
#挂载为磁盘
rclone mount DriveName:Folder LocalFolder --copy-links --no-gzip-encoding --no-check-certificate --allow-other --allow-non-empty --umask 000
DriveName
为初始化配置填的name
,Folder
为OneDrive里的文件夹,LocalFolder
为VPS上的本地文件夹。
如果挂载过程中出现NOTICE: One drive root 'test': poll-interval is not supported by this remote
错误,可以无视该错误。
挂载成功后,输入df -h
命令查看即可验证!
可能会遇到ssh无响应的情况,这时断开ssh重新连接即可。
然后,同样,编辑autoupload.sh文件:
vi /root/autoupload.sh
写入如下内容:
#!/bin/bash
path=$3 #取原始路径,我的环境下如果是单文件则为/data/demo.png,如果是文件夹则该值为文件夹内某个文件比如/data/a/b/c/d.jpg
downloadpath='/root/download'
if [ $2 -eq 0 ]
then
exit 0
fi
while true; do #提取下载文件根路径,如把/data/a/b/c/d.jpg变成/data/a
filepath=$path
path=${path%/*};
if [ "$path" = "$downloadpath" ] && [ $2 -eq 1 ] #如果下载的是单个文件
then
mv "$filepath" /root/OneDrive/
exit 0
elif [ "$path" = "$downloadpath" ] #文件夹
then
mv "$filepath"/ /root/OneDrive/"${filepath##*/}"/
exit 0
fi
done
然后赋予脚本执行权限:
chmod 777 /root/autoupload.sh
然后,用screen启动aria2:
screen -dmS aria2 aria2c --enable-rpc --rpc-listen-all=true --rpc-allow-origin-all -c
这样,再打开你的ip地址,就可以成功连接你的aria,并实现下载后自动上传到Onedrive中了。
关于Rclone
Rclone的验证登陆前面的文章已经提到过,在此不再赘述。
注意,请在AriaNG和Aria2配置并启动后再配置Rclone,否则会出现Ariang无法连接的情况。
两种自动上传方法的评测
用我的同步法:
用大佬的移动文件法:
上面的图片是我用宝塔面板当探针截取的,仅供参考。
说一下主要的内容:
-
稳定性,这个不用说两种方法相差无几,至于上传时出现流量抖动的情况,这是由于微软的接口不稳定造成的,一般都是开始很快,后来很慢。
-
上传后本地文件的去向:我的同步法上传后本地文件仍然存在本地下载目录,但是如果删除了本地的文件再同步,会造成云端文件同时丢失的情况。用移动文件法,移动后本地文件直接消失,而会出现在云端。
大概就这么多,写这篇文章花了我一个周末的时间,唉,眼睛疼。
请到客户端“主题--自定义配置--valine”中填入ID和KEY