吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1861|回复: 6
收起左侧

[其他转载] Linux Bash脚本:在本地机上部署用户自用aria2服务

[复制链接]
歌姬的亲家 发表于 2020-5-17 18:43
本帖最后由 歌姬的亲家 于 2020-5-17 18:54 编辑

说明

aria2是一个功能丰富的下载器,但它是命令行程序,不符合多数人的胃口。

现有的aria2图形界面客户端(如webui-aria2AriaNgYAAW等)都是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

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

微度2020 发表于 2020-5-17 18:44
学习了,感觉还不错
头像被屏蔽
Ryan袁奥 发表于 2020-5-17 19:03
啊笨 发表于 2020-5-17 19:45
wisoft 发表于 2020-5-17 22:35
楼主bash用得溜啊,学习
bdcpc 发表于 2020-5-18 06:47
linux 的,有没有win的教材呢
如梦SSS 发表于 2020-5-18 12:30
Linux7版本上面用的?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-17 06:44

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表