Aria2下载BT,下载完自动拷贝到rclone链接的网盘
一键装Aria2
参考:https://doubmirror.cf/zuigoj__.htmlwget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubiBackup/doubi/master/aria2.sh && chmod +x aria2.sh && bash aria2.sh装完了改一下端口、密码。
前端就不自己搭了,直接访问AriaNG的最新发布页就好了,把自己服务器的参数填进去就能用。
http://ariang.mayswind.net/latest
安装rclone
curl https://rclone.org/install.sh | sudo bash挂载网盘参考其它资料,不同的网盘步骤有些不同。
挂载OneDrive
下载完自动上传网盘
参考:
官方文档 https://aria2.github.io/manual/en/html/aria2c.html#event-hook
别人的轮子
https://lala.im/2982.html
https://www.nozarc.com/2018/01/15/aria2-auto-upload/
https://steyeu.co/posts/aria2-move-completed-downloads-other-directory/
一般VPS存储空间都不大,一个任务下载完成后需要拷贝到网盘保存。比较容易用学生邮箱搞到无限的GoogleDrive。
思路:先用rclone链接GoogleDrive。再用一个脚本在Aria2下载完成的时候把文件拷贝到网盘上去。用到Aria2的 --on-download-complete 参数
自己先写了一个测试脚本帮助理解一下官方文档对--on-download-complete 具体说的什么意思
#!/bin/bash
echo "[$1],[$2],[$3];" > /tmp/aria2_download_complete.log
挂到--on-download-complete参数后面,下载了一个http一个bt,结果如下:
我的脚本最终如下:[0e1708652dda3ef2],[1],[/usr/local/caddy/www/aria2/Download/firefox_2018-04-10_13-19-56.png];
[eda7c5b7b6dcea26],[3],[/usr/local/caddy/www/aria2/Download/Legion.S02E01.HDTV.x264-SVA[rarbg]/Legion.S02E01.HDTV.x264-SVA.mkv];
#!/bin/bash在这个bash测试网站上跑了一下,正好用之前记录的数据作为脚本输入。结果满意。
# rclone链接的网盘的名称,也就是rclone config显示的Name那一列
rcloneDrive='eduGdrv'
# aria2下载目录,也就是aria2的dir配置项的值
downloadPath='/usr/local/caddy/www/aria2/download'
# 传给这个脚本的参数
# $2是文件个数。如果是HTTP/FTP下载,文件个数一般是1。如果是BT下载,文件个数一般大于1。
# $3是文件路径。如果是多个文件(如BT下载),就是第1个文件的路径。
echo "`date`,[$1],[$2],[$3];" >> /tmp/aria2_download_complete.log
if [ $2 -eq 0 ]; then #没有文件,直接返回
echo "`date`,$LINENO" >> /tmp/aria2_download_complete.log
exit 0
elif [ $2 -eq 1 ]; then #1个文件,直接处理
echo "`date`,$LINENO" >> /tmp/aria2_download_complete.log
#从路径得到文件名 eg: 从 /downloadPath/a.jpg 得到 a.jpg
basenameStr=`basename "$3"`
echo "`date`,$LINENO,basenameStr=$basenameStr" >> /tmp/aria2_download_complete.log
#eg: rclone move /downloadPath/a.jpg eduGdrv:
su - -c "rclone move \"$3\" $rcloneDrive:"
exit 0
else #多个文件,一般是BT下载的情况
echo "`date`,$LINENO" >> /tmp/aria2_download_complete.log
#要得bt下载生成的目录名 eg: 从 /downloadPath/bt/a/b/c/d.jpg 得到 /downloadPath/bt
filePath=$3
while true; do
#剥一层目录 eg: 从 /downloadPath/bt/a/b/c/d.jpg 得到 /downloadPath/bt/a/b/c
dirnameStr=`dirname "$filePath"`
echo "`date`,$LINENO,dirnameStr=$dirnameStr" >> /tmp/aria2_download_complete.log
if [ "$dirnameStr" = "$downloadPath" ]; then #剥到aria2下载目录了
basenameStr=`basename "$filePath"`
echo "`date`,$LINENO,basenameStr=$basenameStr" >> /tmp/aria2_download_complete.log
#eg: rclone move /downloadPath/bt eduGdrv:bt
su - -c "rclone move \"$filePath\" $rcloneDrive:\"$basenameStr\""
rm -r -f "$filePath" #删除VPS上残留的目录
exit 0
elif [ "$dirnameStr" = "/" ]; then #脚本出问题了,剥到根目录了,还没匹配到aria2下载目录
# 打印错误日志
echo "`date` [ERROR] rcloneDrive=$rcloneDrive;downloadPath=$downloadPath;[$1];[$2];[$3];" >> /tmp/aria2_download_complete.log
exit 0
else
filePath=$dirnameStr
fi
done
fi
https://www.jdoodle.com/test-bash-shell-script-online
修改配置文件 /root/.aria2/aria2.conf 中以下配置项
# 下载完成后自动执行脚本
on-download-complete=/root/.aria2/aria2_moveto_gdrv.sh
关于su - -c"rclone move..."的说明
一开始我是直接用rclone move命令的,但是脚本执行的效果不正确。脚本被aria2执行了,但是rclone move命令出错了,查aria2日志如下:
一开始我是直接用rclone move命令的,但是脚本执行的效果不正确。脚本被aria2执行了,但是rclone move命令出错了,查aria2日志如下:
05/24 10:08:07 [NOTICE] Download complete: /usr/local/caddy/www/aria2/download/bfy1-114.zip
/root/.aria2/aria2_moveto_gdrv.sh: line 1: #!/bin/bash: No such file or directory
2018/05/24 10:08:07 ERROR : Couldn't find home directory or read HOME or XDG_CONFIG_HOME environment variables.
2018/05/24 10:08:07 ERROR : Defaulting to storing config in current directory.
2018/05/24 10:08:07 ERROR : Use -config flag to workaround.
2018/05/24 10:08:07 ERROR : Error was: user: Current not implemented on linux/amd64
2018/05/24 10:08:08 NOTICE: Config file "/.rclone.conf" not found - using defaults
2018/05/24 10:08:08 Failed to create file system for "eduGdrv:": didn't find section in config file
所以改成了现在的用法:
su - -c"rclone move $3 $rcloneDrive:"
最新脚本更新在 https://github.com/crazypeace/aria2_auto_rclone
$1 这个参数是什么
回复删除请见 https://aria2.github.io/manual/en/html/aria2c.html#event-hook
删除原文 "aria2 passes 3 arguments to specified command when it is executed. These arguments are: GID, the number of files and file path."
$1就是GID