扩展名
|
主要服务功能
|
.service
|
通常服务类型 (service unit):主要是系统服务,包括服务器自己所须要的本地服务以及网络服务都是!比较常常被使用到的服务大可能是这种类型! 因此,这也是最多见的类型了!
|
.socket
|
内部程序数据交换的插槽服务 (socket unit):主要是 IPC (Inter-process communication) 的传输讯息插槽文件 (socket file) 功能。 这种类型的服务一般在监控讯息传递的插槽文件,当有透过此插槽文件传递讯息来讲要连接服务时,就依据当时的状态将该用户的要求传送到对应的 daemon, 若 daemon 还没有启动,则启动该daemon 后再传送用户的要求。
使用 socket 类型的服务通常是比较不会被用到的服务,所以在开机时一般会稍微延迟启动的时间 (由于比较没有这么经常使用嘛!)。通常用于本地服务比较多,例如咱们的图形界面不少的软件都是透过 socket 来进行本机程序数据交换的行为。 (这与早期的xinetd 这个 super daemon 有部份的类似喔!)
|
.target
|
执行环境类型 (target unit):实际上是一群 unit 的集合,例如 multi-user.target 其实就是一堆服务的集合~也就是说, 选择执行 multi-user.target 就是执行一堆其余 .service 或 .socket 之类的服务!
|
.mount
.automount
|
文件系统挂载相关的服务 (automount unit / mount unit):例如来自网络的自动挂载、NFS 文件系统挂载等与文件系统相关性较高的程序管理。
|
.path
|
侦测特定文件或目录类型 (path unit):某些服务须要侦测某些特定的目录来提供队列服务,例如最多见的打印服务,就是透过侦测打印队列目录来启动打印功能! 这时就得要 .path 的服务类型支持了!
|
.timer
|
循环执行的服务 (timer unit):这个东西有点相似 anacrontab 喔!不过是由 systemd 主动提供的,比 anacrontab 更加有弹性!
|
列字段
|
说明
|
UNIT
|
项目的名称,包括各个 unit 的类别 (看扩展名)
|
LOAD
|
开机时是否会被加载,默认 systemctl 显示的是有加载的项目而已!
|
ACTIVE
|
目前的状态,须与后续的 SUB 搭配!就是咱们用 systemctl status 观察时,active 的项目!
|
DESCRIPTION
|
详细描述
|
[Unit] 部份
|
|
设定参数
|
参数意义说明
|
Description
|
就是当咱们使用 systemctl list-units 时,会输出给管理员看的简易说明!固然,使用 systemctl status 输出的此服务的说明,也是这个项目!
|
Documentation
|
这个项目在提供管理员可以进行进一步的文件查询的功能!提供的文件能够是以下的资料:
Documentation=
http://www....
Documentation=man:sshd(8)
Documentation=file:/etc/ssh/sshd_config
|
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
|
就是实际执行此 daemon 的指令或脚本程序。你也可使用 ExecStartPre (以前) 以及ExecStartPost (以后) 两个设定项目来在实际启动服务前,进行额外的指令行为。 可是你得要特别注意的是,指令串仅接受『指令 参数 参数...』的格式,不能接受 <, >, >>, |, & 等特殊字符,不少的 bash 语法也不支持喔! 因此,要使用这些特殊的字符时,最好直接写入到指令脚本里面去!不过,上述的语法也不是彻底不能用,亦即,若要支持比较完整的 bash 语法,那你得要使用 Type=oneshot 才行喔! 其余的 Type 才不能支持这些字符。
|
ExecStop
|
与 systemctl stop 的执行有关,关闭此服务时所进行的指令。
|
ExecReload
|
与 systemctl reload 有关的指令行为
|
Restart
|
当设定 Restart=1 时,则当此 daemon 服务终止后,会再次的启动此服务。举例来讲,若是你在 tty2 使用文字界面登入,操做完毕后注销,基本上,这个时候 tty2 就已经结束服务了。 可是你会看到屏幕又马上产生一个新的 tty2 的登入画面等待你的登入!那就是 Restart 的功能!除非使用 systemctl 强制将此服务关闭,不然这个服务会绵绵不断的一直重复产生!
|
RemainAfterExit
|
当设定为 RemainAfterExit=1 时,则当这个 daemon 所属的全部程序都终止以后,此服务会再尝试启动。这对于 Type=oneshot 的服务颇有帮助!
|
TimeoutSec
|
若这个服务在启动或者是关闭时,由于某些缘故致使没法顺利『正常启动或正常结束』的状况下,则咱们要等多久才进入『强制结束』的状态!
|
KillMode
|
能够是 process, control-group, none 的其中一种,若是是 process 则 daemon 终止时,只会终止主要的程序 (ExecStart 接的后面那串指令),若是是 control-group 时, 则由此 daemon 所产生的其余 control-group 的程序,也都会被关闭。若是是 none 的话,则没有程序会被关闭喔!
|
RestartSec
|
与 Restart 有点相关性,若是这个服务被关闭,而后须要从新启动时,大概要 sleep 多少时间再从新启动的意思。预设是 100ms (毫秒)。
|
[Install] 部份
|
|
设定参数
|
参数意义说明
|
WantedBy
|
这个设定后面接的大部分是 *.target unit !意思是,这个 unit 自己是附挂在哪个 target unit 底下的!通常来讲,大多的服务性质的 unit 都是附挂在 multi-user.target 底下!
|
Also
|
当目前这个 unit 自己被 enable 时,Also 后面接的 unit 也请 enable 的意思!也就是具备相依性的服务能够写在这里呢!
|
Alias
|
进行一个连结的别名的意思!当 systemctl enable 相关的服务时,则此服务会进行连结档的创建!以 multi-user.target 为例,这个家伙是用来做为预设操做环境 default.target 的规划, 所以当你设定用成 default.target 时 , 这 个 /etc/systemd/system/default.target 就 会 连 结 到 /usr/lib/systemd/system/multi-user.target 啰!
|