rhel7 系统服务——unit(单元)
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 启用此单元时, 将会在每个列表单元的 这个选项跟启动级别有关,通常设置的值为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(单元)的更多相关文章
- 如何使用Systemctl管理系统服务和单元?
chu原文:How To Use Systemctl to Manage Systemd Services and Units 简书:如何使用Systemctl管理系统服务和单元? 引言 System ...
- C#Unit单元测试之读取Web.config文件
长期一来,我们所完成的项目都没有写单元测试,今天我一时兴起,决定给自己写的代码写单元测试,简单的测试代码分分钟完成了,一运行测试,就懵逼了.没能达到我的预期效果,而是出现图1所示错误. 图1:单元测试 ...
- 音频单元组件服务参考(Audio Unit Component Services Reference)
目录 了解Audio Unit体系结构 文档结构预览 结构单元介绍 本文主要介绍AudioUnit的组成 本文由自己理解而成,如有错误,请欢迎网友们指出校正. 了解Audio Unit体系结构 开始前 ...
- systemd的新特性及unit常见类型分析与awk用法示列
简述systemd的新特性及unit常见类型分析,能够实现编译安装的如nginx\apache实现通过systemd来管理 系统引导的新特性 系统引导时实现服务启动: 按需激活进程: 系统状态快照: ...
- Linux Systemd 详细介绍: Unit、Unit File、Systemctl、Target
Systemd 简介 CentOS 7 使用 Systemd 替换了SysV Ubuntu 从 15.04 开始使用 Systemd Systemd 是 Linux 系统工具,用来启动守护进程,已成为 ...
- Delphi项目构成之单元文件PAS
单元文件是Pascal源文件,扩展名为.pas. 有三种类型的单元文件: 窗体/数据模块和框架的单元文件(form/data module and frame units),一般由Delphi自动生成 ...
- Delphi XE5教程7:单元引用和uses 子句
内容源自Delphi XE5 UPDATE 2官方帮助<Delphi Reference>,本人水平有限,欢迎各位高人修正相关错误! 也欢迎各位加入到Delphi学习资料汉化中来,有兴趣者 ...
- Delphi的程序单元、结构、基础知识(转)
Object Passal的程序结构很特殊,与其它语言如C++,Object Windows等结构都不同.一个Delphi程序由多个称为单元的源代码模块组成.使用单元可以把一个大型程序分成多个逻辑相关 ...
- cetos7 systemd 详解
CentOS7/RHEL7 systemd详解 目录1. 为什么是systemd(1) 关于Linux服务管理(2) SysV init的优缺点(3) UpStart的改进(4) systemd的 ...
随机推荐
- 微信小程序前端坑
链接:https://www.cnblogs.com/showMagic/p/7677551.html
- 连接(JOIN)
join 用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段. INNER JOIN 从多个表中返回满足 JOIN 条件的所有行. INNER JOIN:如果表中有至少一个匹配,则返回行 L ...
- ubuntu16 安装opencv3.4.2
下载好opencv3.4.2.zip 执行命令: unzip opencv3.4.2.zip 进入解压后的文件夹: cd opencv3.4.2/ 创建编译路径: mkdir release 进入新创 ...
- 【MySQL】完整性约束
" 目录 not null default unique 单列唯一 联合唯一 primary key 单列主键 复合主键 auto_increment 步长与偏移量 foreign key ...
- scrapy import CrawlSpider 报错
from scrapy.spider import CrawlSpider 报错 import module CrawlSpider error 看了下以前一直用的scrapy0.14.1 使用的是B ...
- CSS实现心形、六角星、六边形、平行四边形等几何
本文将利用border属性实现简单几何的绘制: 效果图: 正八角星 说明:采用两个正方形以中心进行旋转叠加: /* 八角星 */ #burst-8 { background: #6376ff1f; w ...
- 队列的python实现
队列(queue),是一种操作受限的线性表.只允许在队列的一端添加元素,在队列的另一端删除元素.能添加元素的一端称为队尾,能删除元素的一端称为队头. 队列最大的特性是:先进先出(FIFO,first ...
- phpstudy所需运行库
百度云链接:http://pan.baidu.com/s/1jIu0v7C 密码:j1qu
- leetcode 0205
目录 700 二叉搜索树中的搜索 175 组合两个表 仍旧不理解 left join 590. N叉树的后序遍历 递归: 迭代: 589 N叉树的前序遍历 递归, 注意 递归 过程中附带的 actio ...
- dojo框架笔记
一.模块定义 1.定义只含值对,没有任何依赖的模块(moudle1.js) define({ color: "black", size: "unisize" } ...