Aria2下载BT,下载完自动拷贝到rclone链接的网盘

一键装Aria2
参考:https://doubmirror.cf/zuigoj__.html
wget -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

# 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
在这个bash测试网站上跑了一下,正好用之前记录的数据作为脚本输入。结果满意。
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日志如下:
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. 回复
    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

      删除

发表评论

The Hot3 in Last 30 Days

ClouDNS .asia免费域名 托管到CloudFlare开CDN白嫖Websocket WS通道翻墙 / desec.io

无服务器 自建短链服务 Url-Shorten-Worker 完整的部署教程