Linux内核版本从3.10后开始使用systemd管理服务,这也是系统开机后的第一个服务。systemd通过unit单元文件来管理服务。

它保存了服务、设备、挂载点和操作系统其他信息的配置文件,并能够处理不同单元之间的依赖关系。大部分单元都静态的定义在单元文件中,也有一些是动态生成的。单元有多种状态:

  • 处于活动的则是(active),当前正在运行

  • 停止的则是(inactive),当前已经停止

  • 启动中的则是(activing),当前正在启动

  • 停止中的则是(deactiving),当前正在停止

  • 失败的则是(failed)状态,意思说单元启动过程中遇到错误比如找不到文件、路径或者进程运行中崩溃了等。

单元类型如下:

单元类型 说明
service单元 用于封装一个后台服务进程,比如通过systemctl start firewalld启动防火墙,这种就属于service单元。
socket单元 用于封装一个后台服务进程,比如通过systemctl start firewalld启动防火墙,这种就属于service单元。
target单元 用于将多个单元在逻辑上组合在一起让它们同时启动。
device单元 用于封装一个设备文件,可用于基于设备启动。并不是每一个设备文件都需要一个device单元,但是每一个被udev规则标记的设备都必须作为一个device单元出现。
mount单元 用于封装一个文件系统挂载点(向后兼容/etc/fstab)
automount单元 用于封装一个文件系统自动挂载点,只有该文件系统被访问时才会进行挂载,它取代了传统的autofs服务。
timer单元 用于封装一个基于时间触发的动作,它取代了atd、crond等计划任务。
swap单元 用于封装一个交换分区或者交换文件,它与mount类似。
path单元 用于根据文件系统上特定对象的变化来启动其他服务。
slice单元 用于控制特定的CGroup内所有进程的总体资源占有。
scope单元 它与service单元类似,但是由systemd根据D-bus接口接收到的信息自动创建,可用于管理外部创建的进程。

systemd能够处理各种依赖与冲突关系以及先后顺序,依赖与冲突、先后顺序两者之间是独立的。比如service1依赖service2,而且启动service1必须先启动service2,,那么这2个服务将会同时启动。

系统提供两种级别的单元:

  • 系统单元:在/lib/systemd/system目录中,优先级高于用户单元。

  • 用户单元:在/usr/lib/systemd/system目录中

查看所有系统单元

 [root@jenkins mongodb]# systemctl list-unit-files
UNIT FILE STATE
proc-sys-fs-binfmt_misc.automount static
dev-hugepages.mount static
dev-mqueue.mount static

service文件说明

1、[unit]段:

设置管理启动顺序与依赖关系

Description=服务描述 给出当前服务的简单描述                                              
Documentation=路径或url 给出文档位置
After=服务.target或服务.service           

定义在某些服务之后启动。例如sshd服务启动必须在network.target sshd-keygen.service服务开启之后才能启动,可以使用如下命令查看sshd服务的配置

cat  /usr/lib/systemd/system/sshd.service

Before=服务.target 定义在某些服务之前启动
Wants=服务.service 弱依赖,表示等号填写服务启动或失败,不影响此配置文件服务的启动
Requires=服务.service 设置此单元所必须依赖的其他单元。 当此单元被启动时,所有这里列出的其他单元也必须被启动。 如果有某个单元未能成功启动,那么此单元也不会被启动。 想要添加多个单元, 可以多次使用此选项, 也可以设置一个空格分隔的单元列表。 注意,此选项并不影响单元之间的启动或停止顺序。 想要调整单元之间的启动或停止顺序, 请使用 After= 或 Before= 选项。 例如,在 foo.service 中设置了 Requires=bar.service 但是并未使用 After= 或 Before= 设定两者的启动顺序, 那么,当需要启动 foo.service 的时候, 这两个单元会被并行的同时启动。 建议使用 Wants= 代替 Requires= 来设置单元之间的非致命依赖关系, 从而有助于获得更好的健壮性, 特别是在某些单元启动失败的时候。

2、[Install] 段:

这个段包含单元启动信息,只有单元状态为enable或者disabled才会用到这个段,这个段不能出现在单元的.d/*.conf配置文件中。

字段 说明
Alias= 启用时使用的别名,可以设为一个空格分隔的别名列表。 每个别名的后缀(也就是单元类型)都必须与该单元自身的后缀相同。 如果多次使用此选项,那么每个选项所设置的别名都会被添加到别名列表中。 在启用此单元时,systemctl enable 命令将会为每个别名创建一个指向该单元文件的软连接。 注意,因为 mount, slice, swap, automount 单元不支持别名,所以不要在这些类型的单元中使用此选项。

WantedBy=

RequiredBy=

接受一个空格分隔的单元列表, 表示在使用 systemctl enable 启用此单元时, 将会在每个列表单元的 .wants/ 或 .requires/ 目录中创建一个指向该单元文件的软连接。 这相当于为每个列表中的单元文件添加了 Wants=此单元 或 Requires=此单元 选项。 这样当列表中的任意一个单元启动时,该单元都会被启动。 有关 Wants= 与 Requires= 的详细说明, 参见前面 [Unit] 小节的说明。 如果多次使用此选项,那么每个选项的单元列表都会合并在一起。

这个选项跟启动级别有关,通常设置的值为mult-user.targe 这是一个target,之后再讲,你只需要知道这相当于启动级别中的多用户默认。

Also=

设置此单元的附属单元,可以设为一个空格分隔的单元列表。 表示当使用 systemctl enable 启用 或 systemctl disable 停用 此单元时, 也同时自动的启用或停用附属单元。如果多次使用此选项, 那么每个选项所设置的附属单元列表都会合并在一起。

DefaultInstance= 仅对模板单元有意义, 用于指定默认的实例名称。 如果启用此单元时没有指定实例名称, 那么将使用这里设置的名称。

[Service]:设置启动行为

启动命令

字段         说明
ExecStart=命令 定义启动进程时执行的命令
ExecReload=命令                                                                                重启服务时执行的命令                                                                                                                                                      
ExecStop=命令 停止服务时执行的命令
ExecStartPre=命令 启动服务之前执行的命令
ExecStartPost=命令 启动服务之后执行的命令
ExecStopPost=命令 停止服务之后执行的命令

所有的启动设置之前,都可以加上一个连词号(-),表示"抑制错误",即发生错误的时候,不影响其他命令的执行。例如:ExecStop=-/bin/sh /server/scripts/xx.sh

启动类型  Type字段定义启动类型。它可以设置的值如下:

simple(默认值) ExecStart字段启动的进程为主进程
forking ExecStart字段将以fork()方式启动,此时父进程将会退出,子进程将成为主进程(后台运行)
oneshot 类似于simple,但只执行一次,Systemd 会等它执行完,才启动其他服务
dbus 类似于simple,但会等待 D-Bus 信号后启动
notify 类似于simple,启动结束后会发出通知信号,然后 Systemd 再启动其他服务
idl 类似于simple,但是要等到其他任务都执行完,才会启动该服务。一种使用场合是为让该服务的输出,不与其他服务的输出相混合


service的其他一些字段

EnvironmentFile=文件路径 指定当前服务的环境参数文件
RestartSec=数值 表示Systemd重启服务之前,需要等待的秒数
PIDFile=PID文件路径 PID进程文件
KillSignal=信号量 停止信号量,值一般为SIGQUIT
TimeoutStopSec=数值 停止超时时间
PrivateTmp=布尔值 独立空间true或false,即文件系统名字空间的配置将被该命令行启动的进程忽略

[Install]:定义如何安装这个配置文件,即怎样做到开机启动

这个设置非常重要,如果设置开机自启动,在/etc/systemd/system目录下面的multi-user.target.wants子目录之中机会创建一个服务的软链接

WantedBy字段,表示该服务所在的 Targe,target的含义是服务组,表示一组服务,它可以设置的值如下

multi-user.target 表示多用户命令行状态
graphical.target 表示图形用户状态,它依赖于multi-user.target        

一个MongoDB的示例

[root@jenkins mongodb]# vim /usr/lib/systemd/system/mongod.service
[Unit]
Description="mongodb启动服务"
After=network.target remote-fs.target nss-lookup.target [Service]
Type=forking
ExecStart=/data/module/mongodb/bin/mongod --config /data/module/mongodb/mongo.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/data/module/mongodb/bin/mongod --shutdown --config /data/module/mongodb/mongo.conf
PrivateTmp=true [Install]
WantedBy=multi-user.target

rhel7 系统服务——unit(单元)的更多相关文章

  1. 如何使用Systemctl管理系统服务和单元?

    chu原文:How To Use Systemctl to Manage Systemd Services and Units 简书:如何使用Systemctl管理系统服务和单元? 引言 System ...

  2. C#Unit单元测试之读取Web.config文件

    长期一来,我们所完成的项目都没有写单元测试,今天我一时兴起,决定给自己写的代码写单元测试,简单的测试代码分分钟完成了,一运行测试,就懵逼了.没能达到我的预期效果,而是出现图1所示错误. 图1:单元测试 ...

  3. 音频单元组件服务参考(Audio Unit Component Services Reference)

    目录 了解Audio Unit体系结构 文档结构预览 结构单元介绍 本文主要介绍AudioUnit的组成 本文由自己理解而成,如有错误,请欢迎网友们指出校正. 了解Audio Unit体系结构 开始前 ...

  4. systemd的新特性及unit常见类型分析与awk用法示列

    简述systemd的新特性及unit常见类型分析,能够实现编译安装的如nginx\apache实现通过systemd来管理 系统引导的新特性 系统引导时实现服务启动: 按需激活进程: 系统状态快照: ...

  5. Linux Systemd 详细介绍: Unit、Unit File、Systemctl、Target

    Systemd 简介 CentOS 7 使用 Systemd 替换了SysV Ubuntu 从 15.04 开始使用 Systemd Systemd 是 Linux 系统工具,用来启动守护进程,已成为 ...

  6. Delphi项目构成之单元文件PAS

    单元文件是Pascal源文件,扩展名为.pas. 有三种类型的单元文件: 窗体/数据模块和框架的单元文件(form/data module and frame units),一般由Delphi自动生成 ...

  7. Delphi XE5教程7:单元引用和uses 子句

    内容源自Delphi XE5 UPDATE 2官方帮助<Delphi Reference>,本人水平有限,欢迎各位高人修正相关错误! 也欢迎各位加入到Delphi学习资料汉化中来,有兴趣者 ...

  8. Delphi的程序单元、结构、基础知识(转)

    Object Passal的程序结构很特殊,与其它语言如C++,Object Windows等结构都不同.一个Delphi程序由多个称为单元的源代码模块组成.使用单元可以把一个大型程序分成多个逻辑相关 ...

  9. cetos7 systemd 详解

      CentOS7/RHEL7 systemd详解 目录1. 为什么是systemd(1) 关于Linux服务管理(2) SysV init的优缺点(3) UpStart的改进(4) systemd的 ...

随机推荐

  1. java反射--超级好用的方法

    1.根据方法名,获取类的对应的方法 Method changeSessionIdMethod = ReflectionUtils.findMethod(HttpServletRequest.class ...

  2. Java JDK 1.5 1.6 1.7 新特性整理

    Java JDK 1.5的新特性 1.泛型 List<String> strs = new ArrayList<String>();//给集合指定存入类型,上面这个集合在存入数 ...

  3. 炸鱼w咕咕咕

    退役选手又回来了w + 将近一个月莫有学OI变得十分笨拙 + 洛谷打卡从300+ 变为 10 + 冬令营加油(虽然我会崩 + 省选加油 (虽然我进不去

  4. Java方法升级

    1. 方法格式 package cn.itcast.day04.demo02; /* 方法其实就是若干语句的功能集合. 方法好比是一个工厂. 蒙牛工厂 原料:奶牛.饲料.水 产出物:奶制品 钢铁工厂 ...

  5. Vue-全局变量和方法

    一.单文件引入 1.创建存放全局变量和方法的vue文件 Common.uve <script> const userName = 'yangjing'; function add(a,b) ...

  6. JS线程及回调函数执行

    JS是单线程的程序,在某些方面来讲并不是十分准确.在浏览器的内核里面有很多的模块,比如js的解释执行的模块,html.css的处理模块,渲染模块等,多数模块是单线程执行的,但是有几个模块是多线程的,比 ...

  7. java中静态初始化块的执行顺序

    在java中,其应该是先于所有的方法执行. 下面是测试代码: public class Test1 { static{ System.out.println("执行静态初始化块test1.. ...

  8. 【转】uWSGI+django+nginx的工作原理流程与部署历程

    一.前言献给和我一样懵懂中不断汲取知识,进步的人们. 霓虹闪烁,但人们真正需要的,只是一个可以照亮前路的烛光 二.必要的前提 2.1 准备知识 1.django 一个基于python的开源web框架, ...

  9. 【原】jenkins知识点_凭据(一)

    一:凭据 1.目的: 与第三方网站或应用程序进行交互,如代码仓库.云存储系统和服务等 2.操作路径: Jenkins-凭据-系统-全局凭据 3.权限 Jenkins 中保存的凭证可以用于: 任何适用于 ...

  10. onclick="this.src=this.src+'?'"是什么意思?

    onclick="this.src=this.src+'?'" 这是表示当前图片链接 在当前链接值的基础上添加了一个问号 譬如当前src="check.aspx" ...