概述
systemctl是一个systemd中其中一个工具,主要用于控制systemd系统和各种服务的管理。在Linux生态系统中,Systemd被部署到了大多数的标准Linux发行版中,只有为数不多的几个发行版尚未部署。Systemd通常是所有其它守护进程的父进程,但并非总是如此。
相关目录
目录 | 用处 | |
---|---|---|
/usr/lib/systemd/system/ | 每个服务最主要的启动脚本目录 | |
/run/systemd/system/ | 系统所生成的服务脚本目录,优先级比/usr/lib/systemd/system/高 | |
/etc/systemd/system/ | 自己创建的服务启动脚本目录,优先级/run/systemd/system/高 |
服务类型
服务类型 | 全称 | 用处 |
---|---|---|
service | 一般服务类型 | 主要是系统服务,包括服务器本身所需要的本机服务以及网络服务,比较经常被使用到的服务大多是这种类型,所以,这也是最常见的类型。 |
socket | 内部程序数据交换的插槽服务 | 主要是IPC(Inter-processcommunication)的传输信息插槽(socketfile)功能。这种类型的服务通常在监控信息传递的插槽档,当有通过此插槽传递信息请求链接服务的时候,就依据当时的状态将该用户的请求传送到对应的daemon,若daemon尚未启动,则启动该daemon后再传送用户的请求。使用socket类型的服务一般是比较不会被用到的服务,因此在开机时通常会稍微延迟启动的时间。一般用于本机服务比较多,例如我们的图形界面很多的软件都是通过socket来进行本机程序数据交换的行为。 |
target | 执行环境类型 | 其实是一群unit的集合,例如multi-user.target其实就是一堆服务的集合。 |
mount | 文件系统挂载相关的服务 | 例如来自网络的自动挂载、NFS文件系统挂载等与文件系统相关性较高的程序管理。 |
path | 监测特定文件或目录类型 | 某些服务需要监测某些特定的目录来提供序列服务,例如最常见的打印服务,就是通过监测打印序列目录来启动打印功能。这时就得要.path的服务类型支持。 |
timer | 循环执行的服务 | 这个东西有点类似anacrontab,不过是由systemd主动提供的,比anacrontab更加有弹性 |
服务管理
目录 | 使用 |
---|---|
启动服务 | systemclt start 服务名 |
关闭服务 | systemclt stop 服务名 |
重启服务 | systemclt restart 服务名 |
重载服务 | systemclt reload 服务名 |
开机自启动服务 | systemclt enable 服务名 |
开机自关闭服务 | systemclt disable 服务名 |
禁用服务 | systemclt mask 服务名 |
取消禁用 | systemctl unmask 服务名 |
服务状态 | systemctl status 服务名 |
服务状态
[root@localhost ~]# systemctl status firewlald
Unit firewlald.service could not be found.
[root@localhost ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2022-05-22 11:01:43 EDT; 7min ago
Docs: man:firewalld(1)
Main PID: 932 (firewalld)
Tasks: 2 (limit: 11208)
Memory: 35.0M
CGroup: /system.slice/firewalld.service
└─932 /usr/libexec/platform-python -s /usr/sbin/firewalld --nofork --nopid
May 22 11:01:42 localhost.localdomain systemd[1]: Starting firewalld - dynamic firewall daemon...
May 22 11:01:43 localhost.localdomain systemd[1]: Started firewalld - dynamic firewall daemon.
May 22 11:01:43 localhost.localdomain firewalld[932]: WARNING: AllowZoneDrifting is enabled. This is considered an insecure configuration option. It >
已防火墙firewalld服务为例,Active:后面的就是服务当前的状态
状态 | 作用 |
---|---|
active(running) | 正有一个或多个程序正在被系统执行 |
active(exited) | 仅执行一次就正常结束的服务,目前并没有任何程序在系统中执行 |
active(waiting) | 正在执行当中,不过有需要等待其他的警告才能继续处理 |
inactive | 服务没有运行 |
dead | 程序已清除 |
在第二行的vendor preset:的后面有一个值这个值是指当前服务默认的启动方式
方式 | 作用 |
---|---|
enabled | 开机时自动运行 |
disabled | 开机时不运行 |
static | 被关联的服务,不可以被自己启动,但是可以通过某些服务进行唤醒启动 |
mask | 不允许被启动,被禁用了 |
自定义服务
概述
自定义服务可以放到/etc/systemd/system/下,后缀名按照service来创建,列如test.service。
文件内容分为三个部分,如下下表
类 | 作用 |
---|---|
[Unit] | 定义服务的说明,信息 |
[UnitType] | 上面讲了服务类型,这里就是写服务类型的,不同的unit type就得要使用相对应的设置项目,本文只将service类型 |
[Install] | 关联target |
Unit
参数 | 作用 |
---|---|
Description | 用来写服务的简易说明的 |
Documentation | 一般用来写官方文档的地址 |
After | 声明某些服务,当那些服务开启之后自己才能启动,不是强制性的 |
Before | 声明某些服务,声明的服务开启时服务需要开启自己,也不是强制性的 |
Requires | 和After一样但是这个是强制性的 |
Wants | 和Before一样但是这个是强制性的 |
Conflicts | 声明服务,进行冲突检查,当声明的服务开启则自己不能启动 |
Service
参数 | 作用 |
---|---|
Type | 启动的方式 |
EnvironmentFile | 开启服务时的环境配置变量 |
ExecStart | 开启服务的启动脚本 |
ExecStop | 关闭服务的停止脚本 |
ExecReload | 重置服务的重置脚本 |
Restart | 当Restart=1的时候,当服务自动关闭时它会自动再开启一个服务除非是用 systemctl强制停止服务 |
RemainAfterExit | 当RemainAfterExit=1的时候,服务停止时会自动启动 |
TimeoutSec | 要改变服务状态时无法正常更改则会按照TimeoutSec设置的时间之后进入"强制结束"状态 |
RestartSec | 和Restart差不多,这个可以设置时间,多久进行开启 |
启动方式
方式 | 作用 |
---|---|
simple | 默认值,使用ExecStart来启动 |
forking | 理解为做为某个进程的子进程 |
oneshot | 与simple差不多,不过这个工作完后就结束了,不会常驻在内存中 |
dbus | 与 simple 差不多,但是必须要活得一个D-Bus的值才可以运行,用这个方式启动的时候还需要设置一个BusName=才行 |
idle | 要启动的时候必须要所有的工作都顺利执行完后才会执行,一般都是开机器最后运行的东西 |
install
参数 | 作用 |
---|---|
WantedBy | 一般都是已*.targetunit为后缀的文件,指定这个服务是在某个targetunit下,一般来说,大多的服务性质 unit 都是附挂在multi-user.target下面。 |
Also | 指出和服务一起安装或者被协助的单元。 |
Alias | 进行一个链接的别名的意思,当设置开机自启的时候则服务会进行链接文件的创建,命名由Alias来指定 |