最早的时候我半懂不懂的抄别人作业,使用 init.rc 来实现开机自启动程序,当然仅仅只能实现开机启动,其它功能全没有,之后一直在想是不是要系统的看看这个工具的,起码实现保活。
后来发现了阮一峰有详细介绍 Systemd 的文章,这才算找到一个比较简单、靠谱的方法来实现服务程序的开机自启和保活
当然这里只简单的说一下我是怎么使用,居家使用足够了,详细的请啃原文,里面有很多有用的命令和方法 >> http://ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html
创建文件
这是最重要的配置步骤,文件放在 /usr/lib/systemd/system , 文件按 XXX.service 格式命名 ,XXX 就是我们的服务名称,如果没有特殊需求,按我下面的格式配置就好了,以我的 aria2 程序为例,基本上只是设置了一下描述和启动命令,其它启动依赖基本上用不上:
sudo nano /usr/lib/systemd/system/Aria2.service
[Unit]
Description= Aria2 application start and daemon
Documentation=
After=
Wants=
[Service]
EnvironmentFile=
#ExecStart设置程序启动命令,平时怎么启动,这里就怎么写
ExecStart= sudo -u www -g www aria2c --conf-path=/home/www/conf/aria2.conf -D
ExecReload=/bin/kill -HUP $MAINPID
Type=simple
KillMode=process
#Restart设置 aria2 退出后,Systemd 重启它的方式, on-failure 表示发生任何意外就重启 aria2 , always 表示任何情况都重启
#Restart=on-failure
Restart=always
RestartSec=30s
[Install]
WantedBy=multi-user.target
启动服务
service文件保存后,使用命令启动服务 >>> sudo systemctl start aria2c
检查状态
启动后使用这个命令查看状态 >>> sudo systemctl status aria2c
设置开机启动
如果状态正常,那么就可以设置开机启动,用这个命令 >>> sudo systemctl enable aria2c
保活检测
如果想要测试保活,可以使用下面两个方法强行结束进程,看在过了 RestartSec 时间之后服务是否重启
方法一: sudo systemctl kill aria2c
方法二:找出进度ID直接用kill结束
yywr.net@h:~$ sudo lsof -i:6800
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
aria2c 38070 www 5u IPv4 743710 0t0 TCP localhost:6800 (LISTEN)
aria2c 38070 www 6u IPv6 743712 0t0 TCP ip6-localhost:6800 (LISTEN)
yywr.net@h:~$ sudo kill 38070
附: Restart 重启设置选项,更多资料看前面给出的链接
- no(默认值):退出后不会重启
- on-success:只有正常退出时(退出状态码为0),才会重启
- on-failure:非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启
- on-abnormal:只有被信号终止和超时,才会重启
- on-abort:只有在收到没有捕捉到的信号终止时,才会重启
- on-watchdog:超时退出,才会重启
- always:不管是什么退出原因,总是重启
本文是 居家服务器折腾笔记 的一部分

One thought on “Linux 程序开机启动并保活:Systemd 进程守护管理工具”