打开user lingering来运行服务 + 在linux上建立aria2c服务
概括
最近在搞自己的小主机,在配置自己的aria2c服务的时候,发现aria2的服务时不时就会断掉,并报错Emergency shutdown sequence commencing
。
本文介绍了如何修复这个问题,以及我的aria2服务配置
问题
因为想要aria2c以非root用户运行,我用 systemctl --user start aria2.service
,这个时候服务正常启动,也不会结束。
但是,一旦我退出这个ssh session,过几秒之后aria2c就会自动停止。
重复几次试验后,确认了退出ssh session后,aria2c服务就会停止。
下面是报错的日志
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
我们可以用这个命令来打开
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
[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
的内容如下
# 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