在云端服务器上利用 aria2 实现高速下载、断点续传与自动任务管理是一种常见方案。aria2 支持多协议下载,并通过内置的 JSON-RPC 接口提供远程调用能力,从而可以结合 Python 脚本自动解析网盘分享链接并生成下载任务。
本文将以 CentOS 7 系统为例,详细讲解如何安装并配置 aria2,确保 RPC 服务可用,以及如何验证并调试相关功能。
文章目录
环境准备与安装
需要在 CentOS 7 上安装 aria2。在 CentOS 7 中 aria2 包通常存在于 EPEL 仓库中,因此需要先启用 EPEL 仓库。
启用 EPEL 仓库并安装 aria2 ,执行以下命令启用 EPEL 仓库并安装 aria2。
sudo yum install epel-release -y
sudo yum install aria2 -y
安装完成后,可以通过命令 aria2c --version
检查 aria2 版本,确认程序已安装。
aria2 配置文件编写
aria2 默认不会启用 RPC 服务,需要通过配置文件开启。
下面提供一个示例配置文件,建议存放在 /etc/aria2/aria2.conf
中。
# 启用 RPC 服务,并允许所有来源访问
enable-rpc=true
rpc-listen-all=true
rpc-allow-origin-all=true
# 如需安全验证,则设置访问密钥(远程调用时须携带 token:your_secret_here)
rpc-secret=your_secret_here
# 下载相关配置
max-concurrent-downloads=5
continue=true
max-connection-per-server=16
split=16
# 指定下载目录与会话文件
dir=/data/downloads
input-file=/etc/aria2/aria2.session
save-session=/etc/aria2/aria2.session
save-session-interval=60
# 日志文件(便于排查问题)
log=/var/log/aria2.log
确保 /data/downloads
目录已存在,并赋予合适权限;其中/etc/aria2/aria2.session
文件如果不存在,需要手动创建;如果不需要 token 验证,可删除或注释掉 rpc-secret
项,但建议使用以保证安全。
创建 aria2 systemd 服务单元
为确保 aria2 后台自动启动并实现开机自启,建议利用 systemd 管理 aria2 服务。
在 /etc/systemd/system/aria2.service
中创建服务文件。
[Unit]
Description=Aria2c Download Manager
After=network.target
[Service]
# 根据实际情况选择运行用户,推荐使用专用用户 aria2,若不存在需创建
User=aria2
Group=aria2
WorkingDirectory=/data/downloads
ExecStart=/usr/bin/aria2c --conf-path=/etc/aria2/aria2.conf
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
如果系统中尚无 aria2
用户,则创建专用账户。
sudo useradd -r -s /sbin/nologin aria2
调整相关目录权限,确保 aria2
用户对 /data/downloads
、/etc/aria2
有读写权限。
sudo mkdir -p /data/downloads
sudo chown -R aria2:aria2 /data/downloads
sudo chown -R aria2:aria2 /etc/aria2
最后重新加载 systemd 并启动 aria2 服务:
sudo systemctl daemon-reload
sudo systemctl start aria2
sudo systemctl enable aria2
在服务启动后,可以执行 sudo systemctl status aria2
检查状态,确认显示类似如下信息。
● aria2.service - Aria2c Download Manager
Loaded: loaded (/etc/systemd/system/aria2.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2025-03-10 10:11:56 CST; ... ago
Main PID: 9374 (aria2c)
CGroup: /system.slice/aria2.service
└─9374 /usr/bin/aria2c --conf-path=/etc/aria2/aria2.conf
Mar 10 10:11:56 VM-0-11-centos aria2c[9374]: 03/10 10:11:56 [NOTICE] IPv4 RPC: listening on TCP port 6800
Mar 10 10:11:56 VM-0-11-centos aria2c[9374]: 03/10 10:11:56 [NOTICE] IPv6 RPC: listening on TCP port 6800
显示状态为 active (running) 即表示服务已成功启动。
防火墙与端口开放
为确保远程设备能够通过 RPC 调用 aria2,需要开放 6800 端口。
检查防火墙是否允许 6800 端口访问。
sudo firewall-cmd --add-port=6800/tcp --permanent
sudo firewall-cmd --reload
若返回“Warning: ALREADY_ENABLED: 6800:tcp”,说明该端口已开放。
可通过命令检查。
sudo firewall-cmd --list-ports
应在列表中看到 6800/tcp
。
同时如果服务器处于云平台(如阿里云、腾讯云等),还需检查云安全组规则,确保 6800 端口对外开放。最后通过 sudo netstat -tulnp | grep 6800
检查 aria2 是否监听在 0.0.0.0:6800
,确保所有 IP 均可访问。
RPC 服务测试
使用 curl
命令测试 aria2 RPC 服务是否可用。在远程或本机上执行以下命令(注意 JSON 格式需要转义双引号):
curl -d "{\"jsonrpc\": \"2.0\", \"id\": \"test\", \"method\": \"aria2.getVersion\", \"params\": [\"token:your_secret_here\"]}" -H "Content-Type: application/json" http://110.140.221.86:6800/jsonrpc
如果返回如下 JSON 信息:
{
"id": "test",
"jsonrpc": "2.0",
"result": {
"enabledFeatures": ["Async DNS", "BitTorrent", "Firefox3 Cookie", "GZip", "HTTPS", "Message Digest", "Metalink", "XML-RPC"],
"version": "1.34.0"
}
}
则表示 RPC 服务已成功启用,版本号为 1.34.0,并且各项功能均正常工作。
当 RPC 服务验证成功后,可以通过远程调用添加下载任务。下面提供两种方式进行说明。
使用 curl 添加下载任务
执行以下命令,添加一个下载任务(以下载示例文件为例):
curl -d "{\"jsonrpc\": \"2.0\", \"id\": \"test\", \"method\": \"aria2.addUri\", \"params\": [\"token:your_secret_here\", [\"https://example.com/file.zip\"]]}" -H "Content-Type: application/json" http://110.140.221.86:6800/jsonrpc
返回结果类似:
{
"id": "test",
"jsonrpc": "2.0",
"result": "2089b05ecca3d829"
}
任务 ID 表示任务已成功加入下载队列。
使用 Python 脚本添加下载任务
利用 Python 的 requests
库实现自动添加下载任务,示例代码如下:
import requests
import json
# 远程 aria2 RPC 地址(公网 IP 或域名)
ARIA2_RPC_URL = "http://110.140.221.86:6800/jsonrpc"
ARIA2_SECRET = "token:your_secret_here"
def add_download(url):
payload = {
"jsonrpc": "2.0",
"method": "aria2.addUri",
"id": "test",
"params": [ARIA2_SECRET, [url]]
}
headers = {"Content-Type": "application/json"}
response = requests.post(ARIA2_RPC_URL, data=json.dumps(payload), headers=headers)
return response.json()
# 测试添加下载任务
download_link = "https://example.com/file.zip"
result = add_download(download_link)
print(result)
成功返回后,会显示任务 ID,说明任务已添加至 aria2 下载队列。
常见问题与排查
在部署使用aria2
服务及RPC接口时,常见的问题通常集中在系统用户权限、文件目录访问权限、以及RPC配置请求格式等几个方面。为避免以上常见问题,应确保系统用户、工作目录、权限设置正确,RPC 请求的 JSON 格式符合规范并正确转义。
错误类型 | 错误提示 | 可能原因 | 解决方法 |
---|---|---|---|
用户权限错误(systemd) | status=217/USER |
配置文件中指定的用户或用户组不存在 | 检查并确保systemd 配置文件中指定的User 和Group 存在,并具备正确权限 |
目录权限错误 | status=200/CHDIR |
指定的工作目录不存在或无权限访问 | 确保WorkingDirectory 路径存在,且运行用户有读写权限 |
RPC连接错误 | 无法连接RPC | aria2 RPC未正确启动或端口未监听 | 检查RPC是否启用并监听正确端口,确保aria2.conf中的RPC配置正确并已开启 |
用户权限问题 | status=217/USER |
用户不存在或权限不够 | 检查aria2 运行用户,确保其存在且对下载目录有读写权限 |
RPC 请求错误 | JSONRPC解析错误 | JSON请求字符串未正确转义 | RPC请求中的JSON字符串必须正确转义,如:"{\"jsonrpc\": ...}" |
总结
本文详细介绍了如何在 CentOS 7 环境下安装与配置 aria2,并通过 systemd 启动服务、配置防火墙、启用 RPC 服务以及通过 curl 和 Python 进行远程调用。按照本教程配置完成后,aria2 RPC 服务即可在云端服务器上正常工作,为自动解析网盘分享链接并添加下载任务提供可靠支持。希望本文能为相关项目提供清晰的技术指导和实践参考。