什么是Aria2c

aria2 是一个轻量级的多协议多源的命令行下载工具。它支持 HTTP/HTTPS、FTP、SFTP、BitTorrent和 Metalink。aria2可以介由内置的JSON-RPC和XML-RPC接口来操控

官网自述 https://aria2.github.io/

最大的亮点应该是可以通过JSON-RPC/XML-RPC进行交互,其XML-RPC接口可以通过Python的xml.client标准库进行交互。

安装Aria2c

对于Linux来讲,可以简单地通过apt包管理器进行安装,包名为“aria2”。版本比较新的操作系统,软件仓库里的版本会比较高,例如Ubuntu,GitHub仓库里的版本号已经达到1.34.0的时候,16.04 LTS仓库里的是1.19.0;18.04 LTS仓库里的是1.33.1。
而对于Windows而言,首先当然可以下载源码,编译出aria2c.exe,但aria2的GitHub仓库里已经有了预编译好的发行版本,怎么方便怎么弄就行。

有了aria2c可执行文件之后,Linux相对比较好配置,可以写一个systemctl服务文件,或者其他的传统艺能,比如supervisor之类的。难点在于Windows的配置,接下来主要解释Windows下的配置。

1. 启动脚本

说是脚本,其实就是一行命令:

aria2c.exe --conf=./aria2c.conf

2. 完善目录结构

可以看到启动脚本里有一个 aria2c.conf 的文件,同样可以发现GitHub上下载下来的预编译包里没有这个文件,只有一个孤零零的aria2c.exe(除去一些readme和版权声明之类的东西)。
因此首先需要新建一个名为 aria2c.conf 的配置文件,一个网上随处可见的典型的配置文件如下所示,需要注意一下高亮的部分,那些行一定要记得写:

#################
## 文件保存相关 ##
#################

# 文件的保存路径(可使用绝对路径或相对路径), 默认: 当前启动位置
dir=d:/aria2/

# 启用磁盘缓存, 0为禁用缓存, 需1.16以上版本, 默认:16M
disk-cache=32M

# 文件预分配方式, 能有效降低磁盘碎片, 默认:prealloc
# 预分配所需时间: none < falloc ? trunc < prealloc
# falloc和trunc则需要文件系统和内核支持
# NTFS建议使用falloc, EXT3/4建议trunc, MAC 下需要注释此项
file-allocation=falloc

# 断点续传
continue=true

#################
## 下载连接相关 ##
#################

# 最大同时下载任务数, 运行时可修改, 默认:5
#max-concurrent-downloads=5

# 同一服务器连接数, 添加时可指定, 默认:1
max-connection-per-server=5

# 最小文件分片大小, 添加时可指定, 取值范围1M -1024M, 默认:20M
# 假定size=10M, 文件为20MiB 则使用两个来源下载; 文件为15MiB 则使用一个来源下载
min-split-size=10M

# 单个任务最大线程数, 添加时可指定, 默认:5
#split=5

# 整体下载速度限制, 运行时可修改, 默认:0
#max-overall-download-limit=0

# 单个任务下载速度限制, 默认:0
#max-download-limit=0

# 整体上传速度限制, 运行时可修改, 默认:0
#max-overall-upload-limit=0

# 单个任务上传速度限制, 默认:0
#max-upload-limit=0

# 禁用IPv6, 默认:false
#disable-ipv6=true

# 连接超时时间, 默认:60
#timeout=60

# 最大重试次数, 设置为0表示不限制重试次数, 默认:5
#max-tries=5

# 设置重试等待的秒数, 默认:0
#retry-wait=0


#################
## 进度保存相关 ##
#################


# 从会话文件中读取下载任务
input-file=./aria2.session

# 在Aria2退出时保存`错误/未完成`的下载任务到会话文件
save-session=./aria2.session

# 定时保存会话, 0为退出时才保存, 需1.16.1以上版本, 默认:0
save-session-interval=60

################
## RPC相关设置 ##
################

# 启用RPC, 默认:false
enable-rpc=true

# 允许所有来源, 默认:false
rpc-allow-origin-all=true

# 允许非外部访问, 默认:false
rpc-listen-all=true

# 事件轮询方式, 取值:[epoll, kqueue, port, poll, select], 不同系统默认值不同
event-poll=select

# RPC监听端口, 端口被占用时可以修改, 默认:6800
#rpc-listen-port=6800

# 设置的RPC授权令牌, v1.18.4新增功能, 取代 --rpc-user 和 --rpc-passwd 选项
rpc-secret=hello

# 设置的RPC访问用户名, 此选项新版已废弃, 建议改用 --rpc-secret 选项
#rpc-user=<USER>

# 设置的RPC访问密码, 此选项新版已废弃, 建议改用 --rpc-secret 选项
#rpc-passwd=<PASSWD>

# 是否启用 RPC 服务的 SSL/TLS 加密,
# 启用加密后 RPC 服务需要使用 https 或者 wss 协议连接
#rpc-secure=true

# 在 RPC 服务中启用 SSL/TLS 加密时的证书文件,
# 使用 PEM 格式时,您必须通过 --rpc-private-key 指定私钥
#rpc-certificate=/path/to/certificate.pem

# 在 RPC 服务中启用 SSL/TLS 加密时的私钥文件
#rpc-private-key=/path/to/certificate.key

###################
## BT/PT下载相关 ##
###################

# 当下载的是一个种子(以.torrent结尾)时, 自动开始BT任务, 默认:true
#follow-torrent=true

# BT监听端口, 当端口被屏蔽时使用, 默认:6881-6999
listen-port=51413

# 单个种子最大连接数, 默认:55
#bt-max-peers=55

# 打开DHT功能, PT需要禁用, 默认:true
enable-dht=true

# 打开IPv6 DHT功能, PT需要禁用
#enable-dht6=false

# DHT网络监听端口, 默认:6881-6999
#dht-listen-port=6881-6999

# 本地节点查找, PT需要禁用, 默认:false
#bt-enable-lpd=false

# 种子交换, PT需要禁用, 默认:true
enable-peer-exchange=true

# 每个种子限速, 对少种的PT很有用, 默认:50K
#bt-request-peer-speed-limit=50K

# 客户端伪装, PT需要
#peer-id-prefix=-TR2770-
#user-agent=Transmission/2.77

# 当种子的分享率达到这个数时, 自动停止做种, 0为一直做种, 默认:1.0
seed-ratio=1

# 强制保存会话, 即使任务已经完成, 默认:false
# 较新的版本开启后会在任务完成后依然保留.aria2文件
#force-save=false

# BT校验相关, 默认:true
#bt-hash-check-seed=true

# 继续之前的BT任务时, 无需再次校验, 默认:false
bt-seed-unverified=false

# 保存磁力链接元数据为种子文件(.torrent文件), 默认:false
bt-save-metadata=true

daemon=true

可以看到配置文件里面有一个名叫aria2.session的文件,如果不先创建一个空文件,它会提示找不到而拒绝启动,因此,需要稍微帮它一下。

3. 自启动

可以说这是最麻烦的地方,有些同志把启动脚本写成批处理文件,然后在开机自启动的文件夹(具体而言在%appdata%\Roaming\Microsoft\Windows\Start Menu\Programs\Startup)做一个启动脚本的快捷方式;当然又有些同志觉得一个黑框框挺丑的,所以给写了一个隐藏启动vbs脚本套子,比如说:

CreateObject("WScript.Shell").Run "aria2c.exe --conf-path=aria2.conf",0

也不是说这些同志的方案不好,但对于Windows服务器而言,这要求每次服务器开机时要登陆一下账户,然后才会执行自启动文件夹里的文件。因此创建一个Windows服务的显然是更好的选择,比如说:

> sc create Aria2 binpath= "path/to/aria2c.exe --conf=path/to/aria2c.conf" type= share start= auto displayname= "Aria2 下载服务" 

但难点在于直到本文撰写时,版本1.34.0,仍然会遇到无法后台运行,导致服务启动失败,而且配置文件中session文件的路径也要写绝对路径。
因此就有了一个曲线救国的方案:【任务计划程序】(一个大家总是无视其存在的东西)
配置要点如下:

  • 常规
    • 安全选项【不管用户是否登录都要运行】
  • 触发器
    • 启动时 – 在系统启动时
  • 操作
    • 启动程序
      • 程序【aria2c.exe】
      • 添加参数【–conf=aria2c.conf】
      • 起始于【aria2c.exe所在路径】
  • 设置
    • 如果任务失败,按一下频率重新启动【按需勾选】
    • 如果任务运行时间超过以下时间,停止任务【不勾选】

到此为止Aria2在Windows上的部署就已完成
■QED

留下评论