概述
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来指定 |