Linux Simple Systemd Service Guide
simple systemd service guide
主题
- systemd介绍
- systemd基本操作
- 怎样编写_service_.service文件
- 怎样部署service
systemd介绍
- linux os的系统和服务管理者
- 兼容sysv初始化脚本(init scripts)
- 提供如下功能特性:
- 系统启动时系统服务的并行启动
- daemon程序的按需激活
- 支持系统状态快照(snapshots)
- 基于依赖的服务控制逻辑
- systemd取代rhl7的upstart,作为默认的init系统
systemd基本操作
-
启动服务
systemctl start name.service -
停止服务
systemctl stop name.service -
重启服务
systemctl restart name.service -
重载配置
systemctl reload name.service -
检查服务状态
systemctl status name.service
-
输出所有服务状态
systemctl list-units --type service --all -
使能服务
systemctl enable name.service -
禁止服务
systemctl disable name.service -
列出所有服务并检查是否使能
systemctl list-unit-files --type service
怎样编写name.service文件
name.service文件组成
- [unit]
- 包含一般的选项,不依赖于单元类型(unit type)
- 选项:提供单元描述,指定单元行为,设置对其他单元的依赖关系
- [unit type]
- 如果一个单元有特定的指令,则这些指令被组合在以单元类型命名的块下。
比如,service单元文件包含在[service]块中。
- 如果一个单元有特定的指令,则这些指令被组合在以单元类型命名的块下。
- [install]
- 包含systemctl enable和disable命令使用的单元安装信息
重要的[unit]块选项
-
description
单元有意义的描述信息,systemctl status命令输出中显示该文本信息。
-
documentation
提供该单元的uri引用文件列表。
-
after
定义单元的启动顺序。该单元只在after指定的单元处于激活状态后才启动。
before选择与after功能相反。
-
requires
配置与其他单元的依赖关系。在requires中的单元与该单元一起激活。
如果任何需要的单元启动失败,这个单元就不会被激活。
-
wants
配置比requires弱的依赖关系。
如果任何列出的单元没有成功启动,也不会影响该单元的激活。
建议用于建立定制单元依赖关系。
-
conflicts
配置反向的依赖关系,即与requires配置相反的依赖。
重要的[service]块选项
-
type
配置单元启动类型。影响execstart和其他相关选项的功能。
-
simple
默认选项。execstart启动的进程为服务的主进程。
-
forking
execstart启动的进程创建一个子进程作为服务的主进程。启动完成后父进程退出。
-
oneshot
与simple相似,但是在启动后续的单元之前进程退出。
-
dbus
与simple相似,但是仅在主进程得到d-bus名称之后才启动后续的单元。
-
notify
与simple相似,但是仅在通过sd_notify()函数发送通知消息后才启动后续的单元。
idle
与simple相似,但是直到所有job完成后,才真正执行服务的二进制程序,这避免与服务shell的状态输出信息混淆。-
execstart
当单元启动时,执行该选项指定的命令或脚本。
-
execstop
当单元停止时,执行该选项指定的命令或脚本。
-
execreload
当单元重装时,执行该选项指定的命令或脚本。
-
restart
如果该选项使能,当服务进程退出时,服务重启。作为systemctl stop命令的异常处理。
-
remainafterexit
如果该选项设置为true,即使服务所有的进程退出,这个服务也被认为处于激活状态(active)。
默认是false。
当type=oneshort配置时,这个选项有特殊的用处。
重要的[install]块选项
-
alias
提供单元的额外名称,以空格隔开。除了systemctl enable,大部分sytemctl命令可以使用别名带去真正的单元名称。
-
requiredby
依赖于该单元的其他单元列表。
当该单元使能时,requiredby中的单元就会生成依赖于该单元的require依赖关系。 -
wantedby
弱依赖于该单元的其他单元列表。
当该单元使能时,wantedby中的单元就会生成依赖于该单元的want依赖关系。 -
also
指定和该单元一起安装或卸载的其他单元列表。
-
defaultinstance
限定的实例化单元。即该选项指定了该单元使能的默认实例。
limited to instantiated units, this option specifies the default instance for which the unit is enabled.
例子:自定义中断绑核服务
[unit]
description=configure common_affinity service for system!
after=network.target
[service]
type=oneshot
execstart=/etc/init.d/common_affinity
execstop=/home/zxuss/affinity/superstop.sh
remainafterexit=true
[install]
wantedby=multi-user.target
怎样部署service
以自定义中断绑核服务为例子:
1.将name.service文件拷贝到/usr/lib/systemd/system/目录下
cp -f ${work_path}/common_affinity.service /usr/lib/systemd/system/
2.将服务启动脚本拷贝到/etc/init.d/目录,或者其他目录
cp -f ${work_path}/common_affinity /etc/init.d/
3.如果已经部署了name.service服务,则先禁止该服务,然后重新使能该服务
systemctl disable common_affinity.service
systemctl reenable common_affinity.service
4.如果没有部署过name.service服务,则直接使能name.service服务
systemctl enable common_affinity.service
参考文档:
managing services with systemd
systemd.service — service unit configuration
how to use systemctl to manage systemd services and units