赞
踩
目录
我发现systemctl真的是很有用的东西,感觉使用这个机制可以帮我们解决很多问题,之前没怎么在意这个,现在想着把systemctl这个机制梳理一遍,然后把相关常用的命令整理一下,接下来让我们好好的来理解一下systemctl。
我们提到systemctl就一定需要知道systemd,因为Linux 服务管理有两种方式service和systemctl。而systemd是Linux系统最新的初始化系统(init),作用是提高系统的启动速度,尽可能启动较少的进程,尽可能更多进程并发启动,systemd对应的进程管理命令就是systemctl。值得一提的是,systemctl命令兼容了service哦。
这里咱们梳理一下systemd这个启动服务管理机制有哪些好处(也就是使用systemctl相关命令的好处啦)。
从上面的功能及优先级次序,我们可以知道,/etc/systemd/system/目录下的相关配置,决定系统了会不会执行某些服务,所以该目录下面一般放着一大堆链接文件。而/usr/lib/systemd/system/下,则放着实际执行的systemd启动脚本配置文件。因此如果你想要修改某个服务启动的设置,应该去/usr/lib/systemd/system/下面修改。/etc/systemd/system/仅是链接到正确的执行脚本配置文件而已。所以想要看执行脚本设置,应该就得要到/usr/lib/systemd/system/去查阅。
.service:一般服务类型(service unit):主要是系统服务,包括服务器本身所需要的本机服务以及网络服务,比较经常被使用到的服务大多是这种类型,所以,这也是最常见的类型。
.socket:内部程序数据交换的插槽服务(socketunit):主要是IPC(Inter-processcommunication)的传输信息插槽(socketfile)功能。这种类型的服务通常在监控信息传递的插槽档,当有通过此插槽传递信息请求链接服务的时候,就依据当时的状态将该用户的请求传送到对应的daemon,若daemon尚未启动,则启动该daemon后再传送用户的请求。使用socket类型的服务一般是比较不会被用到的服务,因此在开机时通常会稍微延迟启动的时间。一般用于本机服务比较多,例如我们的图形界面很多的软件都是通过socket来进行本机程序数据交换的行为。
.target:执行环境类型(target unit):其实是一群unit的集合,例如multi-user.target其实就是一堆服务的集合。
.mount:文件系统挂载相关的服务(automount unit/mount unit):例如来自网络的自动挂载、NFS文件系统挂载等与文件系统相关性较高的程序管理。
.path:监测特定文件或目录类型(path unit):某些服务需要监测某些特定的目录来提供序列服务,例如最常见的打印服务,就是通过监测打印序列目录来启动打印功能。这时就得要.path的服务类型支持。
.timer:循环执行的服务(timer unit):这个东西有点类似anacrontab,不过是由systemd主动提供的,比anacrontab更加有弹性。
这里我们可以先试用下面这个指令查看一下atd服务的当前状态,指令和结果如下:
systemctl status atd.service
看到高亮的那个没有,这就是当前服务的状态。那么服务有哪几种常见的状态呢,这里列举说明一下。
上面是运行结果中,我圈出了一个地方,那个是啥?那个其实是这只服务程序的启动状态,也分为一下几种状态。
- systemctl #范列出系统上面有启动的unit
-
- systemctl list-unit-files #列出所有已经安装的unit有哪些
-
- systemctl list-units --type=service --all #列出类型为service的所有项目,不论启动与否
-
- systemctl get-default #输入目前机器默认的模式,如图形界面模式或者文本模式
-
- systemctl isolate multi-user.target #将目前的操作环境改为纯文本模式,关掉图形界面
-
- systemctl isolate graphical.target #将目前的操作环境改为图形界面
-
- systemctlpoweroff #系统关机
-
- systemctl reboot #重新开机
-
- systemctl suspend #进入暂停模式
-
- systemctl rescue #强制进入救援模式
-
- systemctl hibernate #进入休眠模式
-
- systemctl emergency #强制进入紧急救援模式
-
- systemctl list-dependencies --reverse #查询当前默认的target关联了啥
-
- systemctl list-dependencies graphical.target #查询图形界面模式的target关联了啥
-
- systemctl list-sockets #查看当前的socket服务
-
- systemctl show etcd.service #查看 unit 的详细配置情况
-
- systemctl mask etcd.service #禁用某个服务
-
- systemctl unmask etcd.service #解除禁用某个服务
这里我想特别提一下跟操作界面比较有关的target项目,毕竟常用的模式target有以下几种:
这里我们先查看一下service里面的内容,随便找了一个内容比较多的sshd.service,方便讲解,指令结果如下:
分析上面的配置文件,我们大概能够将整个设置分为三个部份,就是:
至于配置文件内有些设置规则还是得要说明一下:
每个部份里面还有很多的设置细项,我们使用一个简单的表格来说明每个项目好了。
[Unit]部分 | |
---|---|
设置参数
|
参数意义说明
|
Description
|
就是当我们使用
systemctllist-units
时,会输出给管理员看的简易说明,当然,使用systemctlstatus
输出的此服务的说明,也是这个项目。
|
Documentation
|
这个项目在提供管理员能够进行进一步的文件查询的功能,提供的文件可以是如下的数据:Documentation=http://www....
|
After
|
说明此
unit
是在哪个
daemon
启动之后才启动,基本上仅是说明服务启动的顺序而已,并没有强制要求里面的服务一定要启动后此unit才能启动。以
sshd.service
的内容为例,该文件提到
After
后面有network.target
以及
sshd-keygen.service
,但是若这两个
unit
没有启动而强制启动sshd.service
的话,那么
sshd.service
应该还是能够启动的,这与Requires
的设置是有差异的。
|
Before
|
与
After
的意义相反,是在什么服务启动前最好启动这个服务。不过这仅是规范服务启动的顺序,并非强制要求。
|
Requires
|
明确的定义此
unit
需要在哪个
daemon
启动后才能够启动,就是设置服务的关联性,如果在此项设置的前导服务没有启动,那么此unit
就不会被启动。
|
Wants
|
与
Requires
刚好相反,规范的是这个
unit
之后最好还要启动什么服务,不过,并没有明确的规范,主要的目的是希望创建让使用者比较好操作的环境。因此,这个Wants后面接的服务如果没有启动,其实不会影响到这个unit
本身。
|
Conflicts
|
代表冲突的服务,即这个项目后面接的服务如果有启动,那么我们
这个
unit
本身就不能启动,我们
unit
有启动,则此项目后的服务就不
能启动,就是冲突性的检查。
|
[Service]
部份
| |
---|---|
设置参数
|
参数意义说明
|
Type
|
说明这个
daemon
启动的方式,会影响到
ExecStart,
一般来说,有下面几种类型:
simple
:默认值,这个
daemon
主要由
ExecStart
接的指令串来启动,启动后常驻于内存中。
forking
:由
ExecStart
启动的程序通过spawns
延伸出其他子程序来作为此
daemon
的主要服务。原生的父程序在启动结束后就会终止运行。传统的unit
服务大多属于这种项目,例如httpd
这个
WWW
服务,当
httpd
的程序因为运行过久因此即将终结了,则systemd
会再重新生出另一个子程序持续运行后,再将父程序删除。
oneshot
:与simple
类似,不过这个程序在工作完毕后就结束了,不会常驻在内存中。
dbus
:与
simple
类似,但这个
daemon
必须要在取得一个D-Bus的名称后,才会继续运行!因此设置这个项目时,通常也要设置BusName=
才行!
idle
:与
simple
类似,意思是,要执行这个daemon必须要所有的工作都顺利执行完毕后才会执行。这类的
daemon通常是开机到最后才执行即可的服务!比较重要的项目大概是simple,forking
与
oneshot
了!毕竟很多服务需要子程序(forking
),而有更多的动作只需要在开机的时候执行一次(oneshot
),例如文件系统的检查与挂载啊等等的。
|
EnvironmentFile
|
可以指定启动脚本的环境配置文件!例如
sshd.service
的配置文件写入到/etc/sysconfig/sshd
当中!你也可以使用
Environment=
后面接多个不同的Shell
变量来给予设置!
|
ExecStart
|
可以指定启动脚本的环境配置文件!例如
sshd.service
的配置文件写入到/etc/sysconfig/sshd
当中!你也可以使用
Environment=
后面接多个不同的Shell
变量来给予设置!
|
ExecStop
|
与
systemctlstop
的执行有关,关闭此服务时所进行的指令。
|
ExecReload
|
与
systemctlreload
有关的指令行为
|
Restart
|
当设置
Restart=1
时,则当此
daemon
服务终止后,会再次的启动此服务。举例来说,如果你在tty2
使用文字界面登陆,操作完毕后登出,基本上,这个时候tty2
就已经结束服务了。但是你会看到屏幕又立刻产生一个新的tty2
的登陆画面等待你的登陆!那就是
Restart的功能!除非使用systemctl
强制将此服务关闭,否则这个服务会源源不绝的一直重复产生!
|
RemainAfterExit
|
当设置为
RemainAfterExit=1
时,则当这个
daemon
所属的所有程序都终止之后,此服务会再尝试启动。这对于Type=oneshot
的服务很有帮助!
|
TimeoutSec
|
若这个服务在启动或者是关闭时,因为某些缘故导致无法顺利
“
正常启动或正常结束”
的情况下,则我们要等多久才进入
“
强制结束
”
的状态!
|
KillMode
|
可以是
process,control-group,none
的其中一种,如果是
proces则daemon
终止时,只会终止主要的程序(
ExecStart
接的后面那串指令),如果是control-group
时,则由此
daemon
所产生的其他control-group的程序,也都会被关闭。如果是
none
的话,则没有程序会被关闭喔!
|
RestartSec
|
与
Restart
有点相关性,如果这个服务被关闭,然后需要重新启动时,大概要sleep
多少时间再重新启动的意思。默认是
100ms
(毫秒)。
|
[Install]部份
| |
---|---|
设置参数
|
参数意义说明
|
WantedBy
|
这个设置后面接的大部分是
*.targetunit
!意思是,这个
unit
本是附挂在哪一个targetunit
下面的!一般来说,大多的服务性质
unit
都是附挂在multi-user.target下面!
|
Also
|
当目前这个
unit
本身被
enable
时,
Also
后面接的
unit
也请
enable。
也就是具有相依性的服务可以写在这里。
|
Alias
|
进行一个链接的别名的意思!当
systemctlenable
相关的服务时则此服务会进行链接文件的创建!以multi-user.target
为例,这个伙是用来作为默认操作环境default.target
的规划,因此当你设置成
default.target时,这个/etc/systemd/system/default.target
就会链接到/usr/lib/systemd/system/multi-user.target。
|
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。