认识系统服务 (daemons)

 
daemon(守护进程;后台程序)与服务:
 
系统为了某些功能必需要提供一些服务 (不管是系统自己仍是网络方面),这个服务就称为 service 。可是 service 的提供老是须要程序的运做,不然如何执行,因此达成这个 service 的程序咱们就称呼他为 daemon。
 
没必要刻意去区分什么是 daemon 与 service !事实上,能够将这二者视为相同!由于达成某个 service 是须要一支 daemon 在背景中运做, 没有这支 daemon 就不会有 service !
 
 
 早期 System V 的 init 管理行为中 daemon 的主要分类 (Optional)
 
启动系统服务的管理方式被称为 SysV 的 init 脚本程序的处理方式!即系统核心第一支呼叫的程序是 init , 而后 init 去唤起全部的系统所须要的服务,不管是本地服务仍是网络服务。
 
基本上 init 的管理机制有几个特点:
 
 服务的启动、关闭与观察等方式:
    全部的服务启动脚本统统放置于 /etc/init.d/ 底下,基本上都是使用 bash shell script 所写成的脚本程序,须要启动、关闭、从新启动、观察状态时, 能够透过以下的方式来处理:
    o 启动:/etc/init.d/daemon start
    o 关闭:/etc/init.d/daemon stop
    o 从新启动:/etc/init.d/daemon restart
    o 状态观察:/etc/init.d/daemon status
 
 服务启动的分类:
    init 服务的分类中,依据服务是独立启动或被一只总管程序管理而分为两大类:
    o 独立启动模式 (stand alone):服务独立启动,该服务直接常驻于内存中,提供本机或用户的服务行为,反应速度快。
    o 总管程序 (super daemon):由特殊的 xinetd 或 inetd 这两个总管程序提供 socket 对应或 port 对应的管理。当没有用户要求某 socket 或 port 时, 所须要的服务是不会被启动的。如有用户要求时,xinetd 总管才会去唤醒相对应的服务程序。当该要求结束时,这个服务也会被结束掉~ 由于透过xinetd 所总管,所以这个家伙就被称为 super daemon。好处是能够透过 super daemon 来进行服务的时程、联机需求等的控制,缺点是唤醒服务须要一点时间的延迟。
 
 服务的相依性问题:
    服务是可能会有相依性的。init 在管理员本身手动处理这些服务时,是没有办法协助相依服务的唤醒的!
 
 执行等级的分类:
    init 是开机后核心主动呼叫的, 而后 init 能够根据用户自定义的执行等级 (runlevel) 来唤醒不一样的服务,以进入不一样的操做界面。基本上 Linux 提供 7 个执行等级,分别是 0, 1, 2...6 , 比较重要的是 1)单人维护模式、3)纯文本模式、5)文字加图形界面。而各个执行等级的启动脚本是透过 /etc/rc.d/rc[0-6]/SXXdaemon 连结到 /etc/init.d/daemon , 连结档名 (SXXdaemon) 的功能为: S 为启动该服务,XX 是数字,为启动的顺序。因为有 SXX 的设定,所以在开机时能够『依序执行』全部须要的服务,同时也能解决相依服务的问题。这点与管理员本身手动处理不太同样就是了。
 
 
 制定执行等级默认要启动的服务:
    若要创建如上提到的 SXXdaemon 的话,不须要管理员手动创建连结档, 透过以下的指令能够来处理默认启动、预设不启动、观察预设启动否的行为:
    o 预设要启动: chkconfig daemon on
    o 预设不启动: chkconfig daemon off
    o 观察预设为启动否: chkconfig --list daemon
 
 执行等级的切换行为:
    当你要从纯文本界面 (runlevel 3) 切换到图形界面 (runlevel 5), 不须要手动启动、关闭该执行等级的相关服务,只要『 init 5 』便可切换,init 这小子会主动去分析 /etc/rc.d/rc[35].d/ 这两个目录内的脚本, 而后启动转换 runlevel 中须要的服务~就完成总体的 runlevel 切换。
 
 
 
 
 systemd 使用的 unit 分类
 
CentOS 7.x 之后,Red Hat 系列的 distribution 放弃沿用多年的 System V 开机启动服务的流程,改用 systemd 这个启动服务管理机制。
 
好处:
 平行处理全部服务,加速开机流程:
    旧的 init 启动脚本是『一项一项任务依序启动』的模式,所以不相依的服务也是得要一个一个的等待。但目前咱们的硬件主机系统与操做系统几乎都支持多核心架构,未相依的服务能同时启动,systemd 就是可让全部的服务同时启动。
 
 一经要求就响应的 on-demand 启动方式:
    systemd 所有就是仅有一只 systemd 服务搭配 systemctl 指令来处理,无须其余额外的指令来支持。不像system V 还要 init, chkconfig, service... 等等指令。
 
 服务相依性的自我检查
    systemd 能够自定义服务相依性的检查并解决依赖。所以若是 B 服务是架构在 A 服务上面启动的,那当你在没有启动 A 服务的状况下仅手动启动 B 服务时, systemd 会自动帮你启动 A 服务喔!这样就能够免去管理员得要一项一项服务去分析的麻烦。
 
 依 daemon 功能分类:
    首先 systemd 先定义全部的服务为一个服务单位 (unit),并将该 unit 归类到不一样的服务类型 (type) 去。旧的 init 仅分为 stand alone 与 super daemon 实在不够看。systemd 将服务单位 (unit) 区分为 service, socket, target, path, snapshot, timer 等多种不一样的类型(type)。
 
 将多个 daemons 集合成为一个群组:
    如同 systemV 的 init 里头有个 runlevel 的特点,systemd 亦将许多的功能集合成为一个所谓的 target 项目,这个项目主要在设计操做环境的建置, 因此是集合了许多的 daemons,即执行某个 target 就是执行好多个 daemon 
 
 向下兼容旧有的 init 服务脚本:
    基本上, systemd 是能够兼容于 init 的启动脚本的,所以,旧的 init 启动脚本也可以透过 systemd 来管理,只是更进阶的 systemd 功能就没有办法支持。
 
可是,systemd 也是有些地方没法彻底取代 init 。包括:
 在 runlevel 的对应上,大概仅有 runlevel 1, 3, 5 有对应到 systemd 的某些 target 类型而已,没有所有对应;
 
 所有的 systemd 都用 systemctl 这个管理程序管理,而 systemctl 支持的语法有限制,不像/etc/init.d/daemon 就是纯脚本能够自定义参数,systemctl 不可自定义参数。;
 
 若是某个服务启动是管理员本身手动执行启动,而不是使用 systemctl 去启动的 (例如你本身手动输入crond 以启动 crond 服务),那么 systemd 将没法侦测到该服务,而没法进一步管理。
 
 systemd 启动过程当中,没法与管理员透过 standard input 传入讯息!所以,自行撰写 systemd 的启动设定时,务必要取消互动机制~(连透过启动时传进的标准输入讯息也要避免!)
 
 
 
systemd 的配置文件放置目录:
 
基本上, systemd 将过去所谓的 daemon 执行脚本统统称为一个服务单位 (unit),而每种服务单位依据功能来区分时,就分类为不一样的类型 (type)。基本的类型有包括系统服务、数据监听与交换的插槽档服务 (socket)、储存系统状态的快照类型、提供不一样相似执行等级分类的操做环境 (target) 等等。
 
配置文件都放置在如下目录中:
 /usr/lib/systemd/system/:每一个服务最主要的启动脚本设定,有点相似之前的 /etc/init.d 底下的文件;
 /run/systemd/system/:系统执行过程当中所产生的服务脚本,这些脚本的优先序要比 /usr/lib/systemd/system/ 高!
 /etc/systemd/system/:管理员依据主机系统的需求所创建的执行脚本,其实这个目录有点像之前 /etc/rc.d/rc5.d/Sxx 之类的功能!执行优先序又比 /run/systemd/system/ 高!
 
也就是说,到底系统开机会不会执行某些服务实际上是看 /etc/systemd/system/ 底下的设定,因此该目录底下就是一大堆连结档。而实际执行的 systemd 启动脚本配置文件, 其实都是放置在 /usr/lib/systemd/system/ 底下。
 
systemd 的 unit 类型分类说明:
/usr/lib/systemd/system/ 如下的数据按扩展名区分不一样的类型 (type)。
常见的 systemd 的服务类型:
 
扩展名
主要服务功能
.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 更加有弹性!
其中又以 .service 的系统服务类型最多见,由于咱们一堆网络服务都是透过这种类型来设计的。
 
 

 
 
透过 systemctl 管理服务
 
基本上, systemd 这个启动服务的机制,主要是透过一只名为 systemctl 的指令来处理。
跟之前systemV 须要 service / chkconfig / setup / init 等指令来协助不一样, systemd 就是仅有 systemctl 这个指令。
 
明确:服务启动脚本 = unit;unit 根据扩展名划分为不一样的 type;type 中的 target unit 是许多 unit 的集合;
 
 systemctl 管理单一服务 (service unit) 的启动/开机启动与观察状态
 
通常来讲,服务的启动有两个阶段,一个是『开机的时候设定要不要启动这个服务』, 以及『你如今要不要启动这个服务』
 
 
不该该使用 kill 的方式来关掉一个正常的服务!不然 systemctl 会没法继续监控该服务!
用 systemtctl status xxx 的输出结果中,第 2, 3 两行很重要~由于那个是告知咱们该 unit 下次开机会不会预设启动,以及目前启动的状态!最底下是这个 unit 的登陆档~若是你的这个 unit 曾经出错过,观察这个地方!【登陆文件信息格式为:“时间” “讯息发送主机” “哪个服务的讯息” “实际讯息内容”】
不少服务彼此之间是有相依性! 透过这个 mask 功能,能够没必要管其余相依服务可能会启动到这个想要关闭的服务。要取消的话只须要用 umask 命令。
 
Active 基本上有几个常见的状态:
  active (running):正有一只或多只程序正在系统中执行的意思,举例来讲,正在执行中的 vsftpd 就是这种
模式。
  active (exited):仅执行一次就正常结束的服务,目前并无任何程序在系统中执行。 举例来讲,开机或者
是挂载时才会进行一次的 quotaon 功能,就是这种模式! quotaon 不须一直执行~只须执行一次以后,就
交给文件系统去自行处理啰!一般用 bash shell 写的小型服务,大可能是属于这种类型 (无须常驻内存)。
  active (waiting):正在执行当中,不过还再等待其余的事件才能继续处理。举例来讲,打印的队列相关服务
就是这种状态! 虽然正在启动中,不过,也须要真的有队列进来 (打印做业) 这样他才会继续唤醒打印机
服务来进行下一步打印的功能。
  inactive:这个服务目前没有运做的意思。
 
开机启动的几个状态值:
 enabled:这个 daemon 将在开机时被执行
 disabled:这个 daemon 在开机时不会被执行
 static:这个 daemon 不能够本身启动 (enable 不可),不过可能会被其余的 enabled 的服务来唤醒 (相依属
性的服务)
 mask:这个 daemon 不管如何都没法被启动!由于已经被强制注销 (非删除)。可透过 systemctl unmask 方
式改回本来状态
 
 
 systemctl 观察系统上全部的服务
 
系统上面有多少的服务存在呢?这个时候就得要透过 list-units 及 list-unit-files 来观察。
 
 
列字段
说明
UNIT
项目的名称,包括各个 unit 的类别 (看扩展名)
LOAD
开机时是否会被加载,默认 systemctl 显示的是有加载的项目而已!
ACTIVE
目前的状态,须与后续的 SUB 搭配!就是咱们用 systemctl status 观察时,active 的项目!
DESCRIPTION
详细描述
systemctl 不加参数,其实预设就是 list-units 的意思。
 
使用 systemctl list-unit-files 会将系统上全部的服务统统列出来~而不像 list-units 仅以 unit 分类做大体的说明。至于 STATE 状态就是开机是否会加载的那个状态项目
 
 
 systemctl 管理不一样的操做环境 (target unit)
 
 
跟操做界面相关性比较高的 target 主要有底下几个:
 graphical.target:就是文字加上图形界面,这个项目已经包含了底下的 multi-user.target 项目!
 multi-user.target:纯文本模式!
 rescue.target:在没法使用 root 登入的状况下,systemd 在开机时会多加一个额外的暂时系统,与你本来的
系统无关。这时你能够取得 root 的权限来维护你的系统。可是这是额外系统,所以可能须要动到 chroot 的
方式来取得你原有的系统喔!再后续的章节咱们再来谈!
 emergency.target:紧急处理系统的错误,仍是须要使用 root 登入的状况,在没法使用 rescue.target 时,能够尝试使用这种模式!
 shutdown.target:就是关机的流程。
 getty.target:能够设定你须要几个 tty 之类的,若是想要下降 tty 的项目,能够修改这个东西的配置文件!
 
正常的模式是 multi-user.target 以及 graphical.target 两个,救援方面的模式主要是 rescue.target 以及更严重的 emergency.target。 若是要修改可提供登入的 tty 数量,则修改 getty.target 项目。
 
要注意,改变 graphical.target 以及 multi-user.target 是透过 isolate 来处理的。
 
切换操做模式:
 
 suspend:暂停模式会将系统的状态数据保存到内存中,而后关闭掉大部分的系统硬件,固然,并无实际关机喔! 当用户按下唤醒机器的按钮,系统数据会重内存中回复,而后从新驱动被大部分关闭的硬件,就开始正常运做!唤醒的速度较快。
 hibernate:休眠模式则是将系统状态保存到硬盘当中,保存完毕后,将计算机关机。当用户尝试唤醒系统时,系统会开始正常运做, 而后将保存在硬盘中的系统状态恢复回来。由于数据是由硬盘读出,所以唤醒的效能与你的硬盘速度有关。
 
 
 systemctl 分析各服务之间的相依性
 
 
 
 systemd 的 daemon 运做过程相关的目录简介
 
跟系统的 daemon 运做有关的目录基本上是这样的:
 /usr/lib/systemd/system/:
使用 CentOS 官方提供的软件安装后,默认的启动脚本配置文件都放在这里,这里的数据尽可能不要修改~要修改时,请到 /etc/systemd/system 底下修改较佳!
 
 /run/systemd/system/:
系统执行过程当中所产生的服务脚本,这些脚本的优先序要比 /usr/lib/systemd/system/ 高!
 
 /etc/systemd/system/:
管理员依据主机系统的需求所创建的执行脚本,其实这个目录有点像之前 /etc/rc.d/rc5.d/Sxx 之类的功能!
执行优先序又比 /run/systemd/system/ 高喔!
 
 /etc/sysconfig/*:
几乎全部的服务都会将初始化的一些选项设定写入到这个目录下,举例来讲,mandb 所要更新的 man page
索引中,须要加入的参数就写入到此目录下的 man-db 当中喔!而网络的设定则写在 /etc/sysconfig/network-scripts/ 这个目录内。因此,这个目录内的文件也是挺重要的;
 
 /var/lib/:
一些会产生数据的服务都会将他的数据写入到 /var/lib/ 目录中。举例来讲,数据库管理系统 Mariadb 的数
据库默认就是写入 /var/lib/mysql/ 这个目录下啦!
 
 /run/:
放置了好多 daemon 的暂存档,包括 lock file 以及 PID file 等等。
 
网络服务与端口口对应:
IP 就是表明你的主机在因特网上面的『门牌号码』。 可是你的主机老是能够提供很是多的网络服务而不止一项功能而已,但咱们仅有一个 IP !当客户端联机过来咱们的主机时, 咱们主机是如何分辨不一样的服务要求?那就是透过埠号 (port number) !埠号简单的想象,他就是你家门牌上面的第几层楼! 这个 IP 与 port 就是因特网联机的最重要机制之一。
为了统一整个因特网的端口号对应服务的功能,好让全部的主机都可以使用相同的机制来提供服务与要求服务,因此就有了『通信协议』。
系统上面有没有什么设定可让服务与埠号对应在一块儿呢?查看文件 /etc/services 设定服务与埠号对应 :
 
 
什么是网络服务呢?基本上,会产生一个网络监听端口口 (port) 的程序,你就能够称他是个网络服务了!
 
 

 
systemctl 针对 service 类型的配置文件
 
之前,咱们若是想要创建系统服务,就得要到 /etc/init.d/ 底下去创建相对应的 bash shell script 来处
理。
 
服务的管理是透过 systemd,而 systemd 的配置文件大部分放置于/usr/lib/systemd/system/ 目录内。可是 Red Hat 官方文件指出, 该目录的文件主要是本来软件所提供的设定,建议不要修改!而要修改的位置应该放置于 /etc/systemd/system/ 目录内。
 
举例来讲,若是你想要额外修改 vsftpd.service 的话, 他们建议要放置到哪些地方?
 
 /usr/lib/systemd/system/vsftpd.service:官方释出的预设配置文件;
 
 /etc/systemd/system/vsftpd.service.d/custom.conf:在 /etc/systemd/system 底下创建与配置文件相同文件名的目录,可是要加上 .d 的扩展名。而后在该目录下创建配置文件便可。另外,配置文件最好附档名取名为 .conf较佳! 在这个目录下的文件会『累加其余设定』进入 /usr/lib/systemd/system/vsftpd.service 内喔!
 
 /etc/systemd/system/vsftpd.service.wants/*:此目录内的文件为连接档,设定相依服务的连结。意思是启动了vsftpd.service 以后,最好再加上这目录底下建议的服务。
 
 /etc/systemd/system/vsftpd.service.requires/*:此目录内的文件为连接档,设定相依服务的连结。意思是在启动 vsftpd.service 以前,须要事先启动哪些服务的意思。
 
 
配置文件大概可以将整个设定分为三个部份,就是:
 [Unit]: unit 自己的说明,以及与其余相依 daemon 的设定,包括在什么服务以后才启动此 unit 之类的设
定值,即这个项目与此 unit 的解释、执行服务相依性有关;
 [Service], [Socket], [Timer], [Mount], [Path]..:不一样的 unit type 就得要使用相对应的设定项目。咱们拿的是
sshd.service 来当模板,因此这边就使用 [Service] 来设定。 这个项目内主要在规范服务启动的脚本、环境配置文件档名、从新启动的方式等等。即这个项目与实际执行的指令参数有关。
 [Install]:这个项目就是将此 unit 安装到哪一个 target 里面去的意思!即这个项目说明此 unit 要挂载哪一个 target 底下。
 
配置文件内有些设定规则:
 设定项目一般是能够重复的,例如我能够重复设定两个 After 在配置文件中,不过,后面的设定会取代前
面的喔!所以,若是你想要将设定值归零, 可使用相似『 After= 』的设定,亦即该项目的等号后面什
么都没有,就将该设定归零了 (reset)。
 若是设定参数须要有『是/否』的项目 (布尔值, boolean),你可使用 1, yes, true, on 表明启动,用 0, no, false,off 表明关闭!随你喜爱选择啰!
 空白行、开头为 # 或 ; 的那一行,都表明批注!
[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 啰!
 
 
 
相关文章
相关标签/搜索