概述

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来指定
最后修改:2022 年 07 月 30 日
如果觉得我的文章对你有用,请随意赞赏