编写 systemctl 入门

简介: 编写 systemctl 入门

说明

sshd 服务的 unit 配置文件如下所示,主要分为三部分:[Unit]、[Service] 和 [Install]

/root/systemd/system/myserver@.service

[root@vm03 ~]# cat /usr/lib/systemd/system/sshd.service
[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service
Wants=sshd-keygen.service

[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

[Unit]部分详解

此部分中使用的参数不仅限于 service 类型的 unit,对其它类型 unit 也是通用的,有关这些参数及其说明的完整列表,可运行命令 man systemd.unit 或访问 systemd.unit 中文手册


注意:在 [unit] 块中的每个参数后都可以指定一个以空格分隔的列表


Description:当前 unit 的描述

Documentation:文档地址,仅接受类型为:http://、https://、file:、info:、man: 的URI

Requires:表示本 unit 与其它 unit 之间存在强依赖关系,如果本 unit 被激活,此处列出的 unit 也会被激活,如果其中一个依赖的 unit 无法激活,systemd 都不会启动本 unit

Wants:与 Requires 类似,区别在于如果依赖的 unit 启动失败,不影响本 unit 的继续运行

After:表示本 unit 应该在某服务之后启动,选项可参考 systemd.special 中文手册

Before:表示本 unit 应该在某服务之前启动,After和Before 字段只涉及启动顺序,不涉及依赖关系

BindsTo:与 Requires 类似,当指定的 unit 停止时,也会导致本 unit 停止

PartOf:与 Requires 类似,当指定的 unit 停止或重启时,也会导致本 unit 停止或重启

Conflicts:如果指定的 unit 正在运行,将导致本 unit 无法运行

OnFailure:当本 unit 进入故障状态时,激活指定的 unit


[Service]部分详解

service专有参数

只有 service 类型的 unit 才有这些参数,参数完整列表请访问 systemd.service 中文手册 或 systemd.service


simple(默认值):服务为主进程启动,systemd 认为该服务将立即启动,服务进程不会 fork ,如果该服务要启动其他服务,则不要使用此类型启动,除非该服务是 socket 激活型。

forking:服务将以fork分叉的方式启动,此时父进程将会退出,子进程将成为主进程。systemd 认为当该服务进程 fork,且父进程退出后服务启动成功。对于常规的守护进程(daemon)除非你确定此启动方式无法满足需求,否则使用此类型启动即可。使用此启动类型应同时指定 PIDFile= 以便 systemd 能够跟踪服务的主进程

oneshot:类似于simple,但只执行一次,Systemd会等它执行完,才启动其它服务。这一选项适用于只执行一项任务,随后立即退出的服务。可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态

dbus:类似于simple,但会等待D-Bus信号后启动。当指定的 BusName 出现在DBus系统总线上时,systemd 认为服务就绪。

notify:类似于simple,启动完毕后会通知 Systemd ,然后继续往下执行

idle:类似于simple,但是要等到其它所有任务都执行完,才会启动该服务

RemainAfterExit:一个布尔值,它指定即使服务的所有进程都已退出,也应将服务视为活动的,默认为 no


GuessMainPID:一个布尔值,指定systemd在无法可靠确定服务的主 PID 时是否应该猜测它。除非设置了 Type=forking 并且未设置 PIDFile,否则此选项将被忽略,默认为 yes


PIDFile:指向此守护进程的 PID 文件的绝对文件名。对于 Type=forking 的服务,建议使用此选项。Systemd 在服务启动后读取守护进程的主进程的 PID。Systemd 不会写入此处配置的文件,但它会在服务关闭后删除该文件


BusName:到达此服务的 D-Bus 总线名称。对于 Type=dbus 的服务,此选项是必需的


ExecStart:服务启动时执行的命令和参数


ExecStartPre: 服务启动之前执行的命令


ExecStartPost: 服务启动之后执行的命令


ExecReload:重启服务时执行的命令


ExecStop:服务停止时执行的命令和参数


ExecStopPost:服务停止之后执行的命令


RestartSec:重新启动服务前的睡眠时间(以秒为单位)


TimeoutStartSec:等待服务启动的时间(以秒为单位)


TimeoutStopSec:等待服务停止的时间(以秒为单位)


TimeoutSec:同时配置TimeoutStartSec和TimeOutshopSec的缩写


Restart:配置当服务的进程退出、被杀死或达到超时时是否重新启动服务,可以设置的值如下:


no 服务将不会重新启动,这是默认设置

on-success 仅当服务进程完全退出时重新启动(退出代码0)

on-failure 仅在服务进程异常退出时重启,所谓“异常退出”是指:退出码不为"0"

on-abnormal 如果进程因信号或超时而终止时重新启动

on-watchdog 当看门狗超时而重新启动

on-abort 如果进程由于未指定为干净退出状态的未捕获信号而退出,则重新启动

always 总是重新启动

Environment:指定环境变量


KillMode:定义systemd如何停止服务,可以设置的值如下:


control-group(默认值):当前控制组里面的所有子进程,都会被杀掉

process:只杀主进程

mixed:主进程将收到SIGTERM信号,子进程收到SIGKILL信号

none:没有进程会被杀掉,只是执行服务的stop命令


[Install]部分详解

[install] 定义了 unit 的安装信息,此部分配置仅在 systemctl enable 或 systemctl disable 时使用,在 unit 运行时不解释此部分,相当于是配置如何开机启动


此部分中使用的参数不仅限于service类型的unit,对其它类型的 unit也是通用的,有关这些参数及其说明的完整列表,可运行命令 man systemd.unit 或访问 systemd.unit 中文手册


Alias:当前 unit 可用于启动的别名,此处列出的名称必须与服务文件名具有相同的后缀(即类型),在执行 systemctl enable 时将创建从这些名称到 unit 文件名的符号链接

RequiredBy:表示该服务所在的Target,它的值是一个或多个Target,当 systemctl enable 时 unit 符号链接会放入 /etc/systemd/system 目录下面以 Target名 + .required 后缀构成的子目录中

WantedBy:表示该服务所在的Target,它的值是一个或多个Target,当前 systemctl enable 时 unit符号链接会放入 /etc/systemd/system 目录下面以 Target名 + .wants 后缀构成的子目录中

Also:当 systemctl enable 或 systemctl disable 时会同时 enable 和 disable 的其它 unit 列表

启动服务

systemctl status (服务名)

systemctl restart (服务名)

实操案例

指定启动参数的方式,比如:

systemctl restart helloapp@web

systemctl  status   helloapp@web

文件存放目录: /etc/systemd/system

文件名: helloapp@.service

[Unit]
Description=helloapp %i
After=network.target

[Service]
Type=simple
User=root
Group=root
WorkingDirectory=/home/s/apps
ExecStart=/home/s/apps/helloapp %i -c config.hcl
Restart=always

[Install]
WantedBy=multi-user.target

如果你还有其他疑问,评论区留言讨论


王哥的学习路线:http://luxian.javapub.net.cn/

目录
相关文章
|
缓存 JavaScript 安全
深度解析Nginx正向代理的原理与实现
深度解析Nginx正向代理的原理与实现
422 8
|
Oracle 关系型数据库 Linux
PostgreSQL和Oracle中的一条错误消息分析
PostgreSQL服务端的日志里有时会残留一些这样的消息。意思是说客户端的socket意外终止了。 LOG: could not receive data from client: Connection reset by peer. 或中文的 LOG:无法从客户端获得数据: 出现这样的消息有2个可能的原因 1)客户端进程意外结束了 2)客户端进程没有关闭连接就退出了 其中第2点有时比较隐蔽。
2935 0
|
4月前
|
安全
区分ConnectTimeout错误和ConnectionError异常在使用中的不同。
总结一下,这两个问题就像是你试图拨打一个电话。ConnectTimeout错误就好比你拨通了电话,但另一端没有接听;ConnectionError异常则好比你的电话根本没法拨出去,或者你拨错了号码——甚至是你根本就没拿到电话。所以,在下一次遇到类似问题的时候,希望你能想起这个比喻,然后灵活应对。
223 34
|
负载均衡 应用服务中间件 API
Nginx:location配置模块的用法(一)
Nginx:location配置模块的用法(一)
1327 2
|
6月前
|
Java 程序员 数据处理
课时19:Java运算符(位运算符)
课时19介绍Java中的位运算符,涵盖进制转换、位与、位或及移位操作。重点讲解了二进制与其他进制的转换方法,通过具体范例演示了位与和位或运算的过程,并展示了八进制和十六进制的处理方式。此外,还解释了逻辑运算符(&&、||)与位运算符(&、|)的区别及其应用场景,特别是位运算在加密中的应用。
118 5
|
存储 缓存 安全
阿里云服务器实例规格选择参考:经济型、通用算力型、计算型、通用型、内存型区别
当我们在通过阿里云的各种活动选择云服务器实例规格的时候会发现,相同配置的云服务器往往有多个不同的实例可选,而且价格差别也比较大,这会是因为不同实例规格的由于采用的处理器不同,底层架构也有所不同(例如X86 计算架构与Arm 计算架构),因此不同实例的云服务器其性能与适用场景是有所不同。目前阿里云的活动中,主要的实例规格可分为经济型、通用算力型、计算型、通用型、内存型,对于很多初次接触阿里云服务器的用户来说,了解他们之间的差别就是比较重要的了,下面小编来为大家简单介绍下它们之间的区别。
阿里云服务器实例规格选择参考:经济型、通用算力型、计算型、通用型、内存型区别
|
存储 消息中间件 NoSQL
深入了解Redis:高性能的内存数据库
深入了解Redis:高性能的内存数据库
|
存储 NoSQL 网络协议
PG内核解读-第1节PostgreSQL系统概述
本文整理自阿里云数据库开源社区Maintainer于巍(花名漠雪),在PostgreSQL数据库内核解读系列的分享。本篇内容主要分为四个部分: 1. 本系列教程介绍 2. PostgreSQL概述(历史、架构) 3. PostgreSQL安装启动 4. PostgreSQL常用命令、调试
PG内核解读-第1节PostgreSQL系统概述
|
JavaScript
Selenium--WebDriverWait--你知道显示等待?(结合源码让你更加得心应手)
Selenium--WebDriverWait--你知道显示等待?(结合源码让你更加得心应手)
279 0
|
存储 关系型数据库 MySQL
【MySQL技术内幕】4.8-分区表
【MySQL技术内幕】4.8-分区表
379 0

热门文章

最新文章