Linux Systemd服务(2021.07.09)
作者:互联网
Linux Systemd服务(2021.07.09)
目录一、概述
本文将介绍通过systemd
来实现服务的自启动。systemd
是一套系统启动和管理的工具,字母d
是守护进程(daemon)的缩写。
二、配置文件
systemd
的配置文件主要放置在/etc/systemd/system/
与/lib/systemd/system
目录,如果需要添加服务,只需在目录下添加对应的配置文件即可。例如:
# 添加服务配置文件
$ sudo vim /etc/systemd/system/demo.service
[Unit]
Description=demo # 服务描述
After=network.target # 指定服务依赖的 target
[Service]
User=root # 服务运行用户
Group=root # 服务运行用户组
WorkingDirectory=/root/water # 服务工作目录
ExecStart=/usr/local/bin/java -jar demo.jar # 服务启动命令
Type=simple # 服务进程启动方式
Restart=on-failure # 指定服务何时重启
[Install]
WantedBy=multi-user.target # 指定服务所属 target,与自启动相关,一般不用改
# 重新加载所有 service 的配置
$ sudo systemctl daemon-reload
2.1 Unit
systemd
可以管理所有的系统资源,不同的资源称为Unit
(单位),该部分可以定义Unit
的元数据,以及配置与其它Unit
的关系。主要字段如下:
- Description:简短描述
- Documentation:文档地址
- Requires:当前 Unit 依赖的其他 Unit,如果它们没有运行,当前 Unit 会启动失败
- Wants:与当前 Unit 配合的其他 Unit,如果它们没有运行,当前 Unit 不会启动失败
- BindsTo:与
Requires
类似,它指定的 Unit 如果退出,会导致当前 Unit 停止运行 - Before:当前 Unit 必须在该字段指定的 Unit 之前启动
- After:当前 Unit 必须要在该字段指定的 Unit 之后启动
2.2 Service
Service
用来配置 Service,只有 Service 类型的 Unit 才有该部分。主要字段如下:
- Type:定义启动时的进程行为,它有以下几种值:
- Type=simple:默认值,执行 ExecStart 指定的命令,启动主进程
- Type=forking:以 fork 方式从父进程创建子进程,创建后父进程会立即退出
- Type=oneshot:一次性进程,Systemd 会等当前服务退出,再继续往下执行
- Type=dbus:当前服务通过D-Bus启动
- Type=notify:当前服务启动完毕,会通知 Systemd,再继续往下执行
- Type=idle:若有其他任务执行完毕,当前服务才会运行
- User:启动当前服务的用户
- Group:启动当前服务的用户组
- WorkingDirectory:当前服务的工作目录
- ExecStart:启动当前服务的命令
- ExecStartPre:启动当前服务之前执行的命令
- ExecStartPost:启动当前服务之后执行的命令
- ExecReload:重启当前服务时执行的命令
- ExecStop:停止当前服务时执行的命令
- ExecStopPost:停止当其服务之后执行的命令
- RestartSec:自动重启当前服务间隔的秒数
- Restart:定义何种情况 Systemd 会自动重启当前服务,可能的值包括always(总是重启)、on-success、on-failure、on-abnormal、on-abort、on-watchdog
- TimeoutSec:定义 Systemd 停止当前服务之前等待的秒数
- Environment:指定环境变量
2.3 Install
Install
用来定义如何启动,以及是否开机启动。主要字段如下:
- WantedBy:它的值是一个或多个 Target,当前 Unit 激活时(enable)符号链接会放入
/etc/systemd/system
目录下面以 Target 名 +.wants
后缀构成的子目录中 - RequiredBy:它的值是一个或多个 Target,当前 Unit 激活时,符号链接会放入
/etc/systemd/system
目录下面以 Target 名 +.required
后缀构成的子目录中 - Alias:当前 Unit 可用于启动的别名
- Also:当前 Unit 激活(enable)时,会被同时激活的其他 Unit
三、开机启动
通过下面的命令设置服务开机自启动:
$ sudo systemctl enable demo.service
四、启动服务
设置开机启动后,服务并不会立即启动,可以通过下列命令启动服务:
$ sudo systemctl start demo.service
五、查看状态
服务可能会启动失败,通过以下命令查看服务状态:
$ sudo systemctl status demo.service
六、停止服务
可以通过以下命令终止正在运行的服务:
$ sudo systemctl stop demo.service
如果命令没有响应,可以通过以下命令强制kill
进程:
$ sudo systemctl kill demo.service
七、重启服务
通过以下命令重启服务:
$ sudo systemctl restart demo.service
参考文章:
- Systemd 入门教程-命令篇:https://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html
- Systemd 入门教程-实战篇:https://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html
标签:Systemd,服务,2021.07,启动,09,systemd,当前,Unit 来源: https://www.cnblogs.com/xiaoQQya/p/16313767.html