打开user lingering来运行服务 + 在linux上建立aria2c服务

概括

最近在搞自己的小主机,在配置自己的aria2c服务的时候,发现aria2的服务时不时就会断掉,并报错Emergency shutdown sequence commencing

本文介绍了如何修复这个问题,以及我的aria2服务配置

问题

因为想要aria2c以非root用户运行,我用 systemctl --user start aria2.service,这个时候服务正常启动,也不会结束。

但是,一旦我退出这个ssh session,过几秒之后aria2c就会自动停止。

重复几次试验后,确认了退出ssh session后,aria2c服务就会停止。

下面是报错的日志

1
2
3
2022-04-24 12:55:45.578362 [NOTICE] [HttpListenCommand.cc:108] IPv4 RPC: listening on TCP port 6800
2022-04-24 12:55:45.578468 [NOTICE] [HttpListenCommand.cc:108] IPv6 RPC: listening on TCP port 6800
2022-04-24 12:55:57.533186 [NOTICE] [DownloadEngine.cc:265] Emergency shutdown sequence commencing...

原因&解决方法

在进行了一定时间的互联网冲浪后,我在stackexchange上找到了解决方法: 链接.

原因是运行这个service的用户没有user lingering

根据 loginctl 的 man page所说

Enable/disable user lingering for one or more users. If enabled for a specific user, a user manager is spawned for the user at boot and kept around after logouts. This allows users who are not logged in to run long-running services.

简单来说,如果一个用户没有开启user lingering,他开启的service在这个用户登出之后就会自行结束。

所以,解决方法就是为运行这个service的用户开启user lingering

我们可以用这个命令来打开

1
sudo loginctl enable-linger aynakeya # enable user linger for aynakeya

开启完毕后我们再次启动service,然后登出ssh session。发现这个时候aria2已经不会自动退出了。

Aria2 As Service

顺便贴一下aria2作为系统服务的配置。

安装好aria2后,把这个文件aria2.service 放到 /etc/systemd/user/目录下即可。

启动aria2的方式为: systemctl --user start aria2.service
关闭为: systemctl --user stop aria2.service

1
2
3
4
5
6
7
8
9
10
[Unit]
Description=Aria2c As Service

[Service]
Type=forking
ExecStart=/usr/bin/aria2c -D --conf-path=/home/aynakeya/repo/aria2/aria2-daemon.conf
WorkingDirectory=/home/aynakeya/repo/aria2

[Install]
WantedBy=default.target

aria2-daemon.conf的内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# server config
continue=true
# run as service
daemon=true
#设置加密的密钥
#rpc-secret=aaabbbccc
#允许rpc
enable-rpc=true
#允许所有来源, web界面跨域权限需要
rpc-allow-origin-all=true
#允许外部访问,false的话只监听本地端口
rpc-listen-all=true
#RPC端口, 仅当默认端口被占用时修改
#rpc-listen-port=6800


# logging config
log=/home/aynakeya/repo/aria2/log/aria2.log
log-level=notice

# download config

#最大同时下载数(任务数), 路由建议值: 3
max-concurrent-downloads=5
#断点续传
continue=true
#同服务器连接数
max-connection-per-server=5
#最小文件分片大小, 下载线程数上限取决于能分出多少片, 对于小文件重要
min-split-size=10M
#单文件最大线程数, 路由建议值: 5
split=10
#下载速度限制
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=*
#文件保存路径, 默认为当前启动位置
dir=/home/aynakeya/Downloads
#文件缓存, 使用内置的文件缓存, 如果你不相信Linux内核文件缓存和磁盘内置缓存时使用, 需要1.16及以上版本
#disk-cache=0