使用aria2做离线下载

作者:matrix 发布时间:2018-12-19 分类:零零星星

官网:https://aria2.github.io/
aria2属于垮平台的命令行下载工具,支持多协议BT磁力链.很多网盘下载工具都是用aria2作为下载器
远端服务器做为下载工具的话可以很方便的实现离线下载功能
测试环境:Ubuntu

安装

sudo apt-get install aria2

若需要安装最新版本:
https://github.com/aria2/aria2/releases

wget https://github.com/aria2/aria2/releases/download/release-1.34.0/aria2-1.34.0.tar.gz
tar -xvf aria2-1.34.0.tar.gz
cd aria2-1.34.0
./configure
make & make install
cp ./src/aria2c /usr/local/bin
aria2c -v #查看版本

配置

sudo mkdir /etc/aria2    #存放conf配置文件的路径 
sudo touch /etc/aria2/aria2.session    #新建session文件
sudo chmod 777 /etc/aria2/aria2.session    #设置aria2.session可写
sudo vi /etc/aria2/aria2.conf    #创建并编辑下载操作的配置文件

若不特殊存放aria2默认会读取~/.aria2/aria2.conf中的配置文件

写入以下内容:

# rpc加密密钥 
#rpc-secret=xxxxxx
#允许rpc
enable-rpc=true
#允许所有来源, web界面跨域权限需要
rpc-allow-origin-all=true
#允许非外部访问
rpc-listen-all=true
#RPC端口, 仅当默认端口被占用时修改
#rpc-listen-port=6800

#最大同时下载数(任务数), 路由建议值: 3
max-concurrent-downloads=5
#断点续传
continue=true
#同服务器连接数
max-connection-per-server=10
#最小文件分片大小, 下载线程数上限取决于能分出多少片, 对于小文件重要
min-split-size=1M
#单文件最大线程数, 路由建议值: 5
split=100
#下载速度限制
max-overall-download-limit=0
#单文件速度限制
max-download-limit=0
#上传速度限制
max-overall-upload-limit=0
#单文件速度限制
max-upload-limit=0
#断开速度过慢的连接
#lowest-speed-limit=0
#验证用,需要1.16.1之后的release版本
#referer=*

#从会话文件中读取下载任务
input-file=/etc/aria2/aria2.session
#在Aria2退出时保存`错误/未完成`的下载任务到会话文件
save-session=/etc/aria2/aria2.session
#定时保存会话,需要1.16.1之后的release版
#save-session-interval=60

#下载文件的保存路径, 默认为当前启动位置
dir=/home/你的用户名/下载
#禁用IPv6, 默认:false
disable-ipv6=true
#文件缓存, 使用内置的文件缓存, 如果你不相信Linux内核文件缓存和磁盘内置缓存时使用, 需要1.16及以上版本
#disk-cache=0
#另一种Linux文件缓存方式, 使用前确保您使用的内核支持此选项, 需要1.15及以上版本(?)
#enable-mmap=true
#文件预分配, 能有效降低文件碎片, 提高磁盘性能. 缺点是预分配时间较长
#所需时间 none < falloc ? trunc << prealloc, falloc和trunc需要文件系统和内核支持
file-allocation=prealloc

#启用本地节点查找
bt-enable-lpd=true
#添加额外的tracker
bt-tracker=
#单种子最大连接数
#bt-max-peers=55
#强制加密, 防迅雷必备
#bt-require-crypto=true
#当下载的文件是一个种子(以.torrent结尾)时, 自动下载BT
follow-torrent=true
#BT监听端口, 当端口屏蔽时使用
#listen-port=6881-6999

#不确定是否需要,为保险起见,need more test
enable-dht=false
bt-enable-lpd=false
enable-peer-exchange=false
#修改特征
user-agent=uTorrent/2210(25130)
peer-id-prefix=-UT2210-
#修改做种设置, 允许做种
seed-ratio=0
#保存会话
force-save=false
bt-hash-check-seed=true
bt-seed-unverified=true
bt-save-metadata=true
#定时保存会话,需要1.16.1之后的某个release版本(比如1.16.2)
#save-session-interval=60

说明:
注意修改下载文件的保存路径

运行

sudo aria2c --conf-path=/etc/aria2/aria2.conf -D

说明:
-D 参数表示为后台运行
ctrl+c 停止 或直接kill进程

配置系统服务

sudo vi /etc/init.d/aria #

说明:这里使用server aria restart就可以完成重启操作
没有使用aria2c是以为下面的命令killall 会杀掉同名的所有进程 其中也包括当前执行的脚本。否则会导致restart无效 显示Terminated提示
参考:https://blog.csdn.net/wsclinux/article/details/50387121

添加如下内容:

#!/bin/sh
### BEGIN INIT INFO
# Provides:          aria2
# Required-Start:    $remote_fs $network
# Required-Stop:     $remote_fs $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Aria2 Downloader
### END INIT INFO

# 保存到/etc/init.d/aria 
# 启动此服务 server aria restart

CONF=/etc/aria2/aria2.conf #配置文件路径

case "$1" in
    start)
        echo -n "Starting aria2c"
        aria2c --conf-path=$CONF -D
        ;;

    stop)
        echo -n "Shutting down aria2c "
        killall aria2c
        ;;

    restart)
        killall aria2c  &>/dev/null
        echo "starting"
        sleep 3
        aria2c --conf-path=$CONF -D
        echo "done"
        ;;

    *)
        echo "Usage:  $0 {start|stop|restart}"
        exit 1
        ;;

esac
exit
sudo chmod 755 /etc/init.d/aria #修改文件权限

#调用
#service aria {start|stop|restart}

使用

chrome 扩展:https://chrome.google.com/webstore/detail/yaaw-for-chrome/dennnbdlpgjgbcjfgaohdahloollfgoc
在线web UI:
https://github.com/mayswind/AriaNg
http://webui-aria2.ghostry.cn/

配置JSON-RPC路径:默认为 http://主机地址:端口/jsonrpc
若启用rpc-secret token验证内容为xxxxxx:
http://token:xxxxxx@主机地址:端口/jsonrpc

Aria2 bt-tracker列表的更新脚本
避免下载为速度0kb 最好定时每天高新

保存:/root/aria2c-track-update.sh

#!/bin/bash

CONF=/etc/aria2/aria2.conf #配置文件路径
list=`wget -qO- https://raw.githubusercontent.com/ngosang/trackerslist/master/trackers_all_ip.txt|awk NF|sed ":a;N;s/\n/,/g;ta"`
if [ -z "`grep "bt-tracker" $CONF`" ]; then
    sed -i '$a bt-tracker='${list} $CONF
    echo add......
else
    sed -i "s@[#]*bt-tracker.*@bt-tracker=$list@g" $CONF
    echo update......
fi

service aria restart

定时任务:
每天定时更新种子track list 且自动重启aria2c服务

chmod +x /root/aria2c-track-update.sh
crontab -e #编辑定时任务
* 0 * * *  /root/aria2c-track-update.sh

参考:
https://www.jianshu.com/p/b2649d073741
http://aria2c.com/usage.html
https://www.moerats.com/archives/374/
https://blog.csdn.net/daloyanf/article/details/78919749
编译安装报错"virtual memory exhausted: Cannot allocate memory":http://muchfly.iteye.com/blog/2296506