本帖最后由 歌姬的亲家 于 2020-5-17 18:54 编辑
说明
aria2是一个功能丰富的下载器,但它是命令行程序,不符合多数人的胃口。
现有的aria2图形界面客户端(如webui-aria2、AriaNg、YAAW等)都是RPC客户端,为了使用这种客户端,需要让aria2以特殊的后台服务模式运行。
为了建立用户本地自用的aria2后台服务,在Linux下需要编写systemd服务配置文件放到目录~/.config/systemd/user 下,并在其中指定aria2的命令行参数,当参数很多时,又得编写aria2的配置文件。
下面的脚本就是为了把这一过程自动化,只需以普通用户身份(无需root权限)运行脚本,就能让aria2服务在本机上跑起来,并且以后开机自启动。不想要的时候,加参数undeploy 就能卸载这个服务。
如果想要在服务器上部署aria2,还要涉及SSL证书等更加复杂的问题,加上笔者目前没有这个需求,所以略去不提。
#! /bin/bash
#### 文件名:deploy_aria2_rpc_service
#### 建立本地用户自用aria2后台服务
#### 使用方法:
#### ./deploy_aria2_rpc_service (不带参数运行) 为本用户建立并启动aria2后台服务
#### ./deploy_aria2_rpc_service status 查询服务状态
#### ./deploy_aria2_rpc_service undeploy 撤销已经建立的服务
function create_dir_if_nonexist
# 如果参数所指定目录不存在,则建立之;接受任意个数参数
{
for i in "$@"; do
if [ ! -d "$i" ]; then
mkdir -p "$i"
fi
done
}
function create_aria2_daemon_conf
# 建立aria2配置文件
# 参数 $1: 主配置文件名
# 参数 $2: the dir to create the configs in
{
create_dir_if_nonexist "$2"
cd "$2"
# 在下面编辑你想要的aria2参数,但不要更改预设置的dht和session文件路径
(
cat <<-HereIsAria2ConfTemplate
#### Basic Options ####
dir=${HOME}/Downloads
continue=true
#### HTTP/FTP/SFTP Options ####
#### BT/metalink Options ####
dht-file-path=`pwd`/dht/dht4.dat
dht-file-path6=`pwd`/dht/dht6.dat
#### RPC Options ####
enable-rpc=true
rpc-listen-all=true
rpc-listen-port=6800
rpc-secret=Your_Secret_Token
#### Misc. Options ####
daemon=true
save-session=`pwd`/session/aria2_session
input-file=`pwd`/session/aria2_session
HereIsAria2ConfTemplate
) > "$1"
# 说明:出于安全考虑,这里没有指定rpc-allow-origin-all=true,
# 那么在使用AriaNg或YAAW连接时,必须选择WebSocket协议(ws://..),而不是http://..
create_dir_if_nonexist "session" "dht"
touch "session/aria2_session"
cd - >/dev/null
# 当aria2以daemon模式运行时,它读取的配置文件都需有可执行权限
chmod -R o+rx "$2"
}
function register_aria2_user_service
# 建立用户级aria2服务并使之自启动
# 参数 $1: 服务配置文件名(不带扩展名.service)
# 参数 $2: 对应的Aria2主配置文件的全路径
{
create_dir_if_nonexist "${HOME}/.config/systemd/user"
cd "${HOME}/.config/systemd/user"
# 下面的内容不要随意更改,除非你知道自己在干啥
local a='$MAINPID'
(
cat <<-HereIsAria2UserServiceTemplate
[Unit]
Description=Aria2 Daemon (Local, User)
Documentation=man:aria2c(1) http://aria2.github.io/manual/en/html/index.html
[Service]
Type=forking
ExecStart=/usr/bin/aria2c --conf-path="$2"
ExecReload=/bin/kill -HUP $a
Restart=on-failure
RestartSec=3s
[Install]
WantedBy=default.target
HereIsAria2UserServiceTemplate
) >"${1}.service"
systemctl --user daemon-reload
systemctl --user enable "${1}.service"
systemctl --user start "${1}.service"
cd - >/dev/null
}
function unregister_aria2_user_service
# 撤销已经建立的aria2服务
# 参数 $1: 服务配置文件名(不带扩展名.service)
{
cd "${HOME}/.config/systemd/user"
systemctl --user stop "${1}.service"
systemctl --user disable "${1}.service"
rm "${1}.service"
systemctl --user daemon-reload
cd - >/dev/null
}
# aria2ConfDir: aria2配置文件目录,请勿指定为现有的目录
aria2ConfDir="${HOME}/.config/aria2_conf.d"
aria2ConfFileName="aria2_daemon.conf"
serviceName="my_aria2_local"
if [ "$1" = "undeploy" ]; then
unregister_aria2_user_service "${serviceName}"
rm -rf ${aria2ConfDir}
elif [ "$1" = "status" ]; then
systemctl --user status "${serviceName}.service"
else
create_aria2_daemon_conf "${aria2ConfFileName}" "${aria2ConfDir}"
register_aria2_user_service "${serviceName}" "${aria2ConfDir}/${aria2ConfFileName}"
fi
|