systemd服务内容详解
传统的System V是串行启动,即在启动下一个脚本前,上一个脚本必须执行完,这样在启动时间上会有很大的浪费。在这个时间就是金钱的年代,这种启动方式必将被淘汰。 首先是Ubuntu 最先造反,启用了自己的upstart启动方式,upstart基于事件触发,但还是串行启动,但是对于没有必要的服务就不会启动。
这时 systemd出现了,主要优点就是并行启动,节约启动时间,systemd作者曾口出狂言,最快2秒启动
相比以前的System V启动方式有以下优化:
一:传统的启动是内核启动完后,首先执行的第一个进程是/sbin/init。
如果要以systemd方式启动,则首先让内核执行的第一个进程是/lib/systemd/systemd或者/usr/lib/systemd/systemd.
方法是在grub界面输入init=/lib/systemd/systemd
二:systemd启动后,首先会去三个目录下找相应的配置文件,按优先级从高到底为/etc/systemd/,/usr/lib/systemd/
和/lib/systemd/,优先级高的配置文件会覆盖优先级低的配置文件
三:systemd的配置文件又叫unit文件,主要有以下几种
service
:守护进程的启动、停止、重启和重载是此类 unit 中最为明显的几个类型。socket
:此类 unit 封装系统和互联网中的一个 socket 。当下,systemd 支持流式、数据报和连续包的 AF_INET、AF_INET6、AF_UNIX socket 。也支持传统的 FIFOs 传输模式。每一个 socket unit 都有一个相应的服务 unit 。相应的服务在第一个“连接”进入 socket 或 FIFO 时就会启动(例如:nscd.socket 在有新连接后便启动 nscd.service)。device
:此类 unit 封装一个存在于 Linux 设备树中的设备。每一个使用 udev 规则标记的设备都将会在 systemd 中作为一个设备 unit 出现。udev 的属性设置可以作为配置设备 unit 依赖关系的配置源。mount
:此类 unit 封装系统结构层次中的一个挂载点。automount
:此类 unit 封装系统结构层次中的一个自挂载点。每一个自挂载 unit 对应一个已挂载的挂载 unit (需要在自挂载目录可以存取的情况下尽早挂载)。target
:此类 unit 为其他 unit 进行逻辑分组。它们本身实际上并不做什么,只是引用其他 unit 而已。这样便可以对 unit 做一个统一的控制。(例如:multi-user.target 相当于在传统使用 SysV 的系统中运行级别5);bluetooth.target 只有在蓝牙适配器可用的情况下才调用与蓝牙相关的服务,如:bluetooth 守护进程、obex 守护进程等)snapshot
:与 target unit 相似,快照本身不做什么,唯一的目的就是引用其他 unit 。
四:systemd启动的第一个unit文件为/lib/systemd/system/下的default.target文件(这里的default.target一般为链接文
件,这样default.target指向不同的文件,可达到不同的启动等级)
例:
可以看到,default.target指向graphical.target这个文件,graphical.target表示图形界面这个等级
graphical.target其内容如下:
Description= :一些描述,显示给用户界面看的,可以是任何字符串,一般是关于服务的说明。
Requires= :指定graphical.target依赖于multi-user.target这个服务,如果graphical.target被激活,那么 Requires 后面
的multi-user.target服务也会被激活,反之,如果 Requires 后面的multi-user.target服务被停止或无法启动,则graphical.target
服务也会停止。这个选项可以指定多次,那么就要求所有指定的服务都被激活。
的服务。
Conflicts= :配置一个依赖冲突,当rescue.target服务启动时,graphical.target服务停止,反过来,graphical.target服务启动,
那么rescue.targe就会停止。
Wants= :相对弱化的 Requires= ,display-manager.target会被启动,但如果无法启动或无法添加到事务处理,并不影
响graphical.target服务做为一个整体的启动。
AllowIsolate= :布尔值。如果是真值,则此服务可以使用 systemctl isolate 命令进行操作。否则会拒绝此操作。默认值是假。
名字都起作用,当执行 systemctl enable 命令时,会建立相当的链接
五:常用的命令
Requisite=
, RequisiteOverridable= :分别类似上面的两个,不过如果是这个指定服务没有启动,被依赖的服务会不启动,立即失败。
Before=
, After= :配置服务间的启动顺序,比如一个 foo.service 包含了一行 Before=bar.service,那么当他们同时启动时,bar.service 会等待 foo.service 启动完成后才启动。注意这个设置和 Requires= 的相互独立的,同时包含 After= 和 Requires= 也是常见的。此选项可以指定一次以上,这时是按顺序全部启动。
PropagatesReloadTo=
, ReloadPropagatedFrom= :这两个是列出一些服务,当其它服务 reload 时同时 reload 这个服务,或者反之。
IgnoreOnIsolate= :一个布尔值.如果是真则当隔离其它服务时本服务不会停止(不明白隔离是什么意思,大概在后面)。默认是假。
IgnoreOnSnapshot= :一个布尔值.如果是真则本服务不包含快照(snapshots)。对 device 和 snapshot 服务默认为真,其它服务默认为假。
StopWhenUnneeded= :一个布尔值。如果是真则当本服务不使用时会停止。 注意,为了尽量减少 systemd 的工作,默认情况下是不会停止不使用的服务的,除非和其它服务冲突,或用户明确要求停止。如果设置了这个选项,那么如果没有其它活动的服务需要此服务,它会自动停止。默认值是假。
RefuseManualStart=
, RefuseManualStop= :布尔值。如果设为真值,则此服务只能间接的激活或停止。这种情况下,用户直接启动或停止此服务会被拒绝,只有做为其它的服务依赖关系,由其它服务进行启动或停止才可以。这主要是为了停止用户误操作。默认值是假。
AllowIsolate= :布尔值。如果是真值,则此服务可以使用 systemctl isolate 命令进行操作。否则会拒绝此操作。最好的办法是不要动这处选项,除非目标服务的行为类似于 SysV 启动系统中的 runlevels。只是一种预防措施,避免系统无法使用的状态。默认值是假。
DefaultDependencies= :布尔值。如果是真(默认值),一些本服务默认的依赖会隐式的建立,具体是哪些依赖,则于服务的类型决定。比如,对于普通的服务(.service类型),它会确保在系统基本服务启动后才启动本服务,会在系统关机前确保本服务已关闭。一般来说,只有早期开机服务和后期的关机服务,才需要把这个设成假。强烈对大多数普通服务,让这个选项启用即可。如果设成假,也不会禁用所有的隐式依赖,只是禁用那些非必要的。
ConditionPathExists=
, ConditionPathExistsGlob=
, ConditionPathIsDirectory=
, ConditionPathIsSymbolicLink=
, ConditionPathIsMountPoint=
, ConditionPathIsReadWrite=
, ConditionDirectoryNotEmpty=
,ConditionFileNotEmpty=
, ConditionFileIsExecutable=
, ConditionKernelCommandLine=
, ConditionVirtualization=
, ConditionSecurity=
, ConditionCapability=
, ConditionHost=
, ConditionACPower=
,ConditionNull= :这是一组类似的东西。检测特定的条件是不是真值,如果不是真值,服务会略过启动,但是它依赖的服务还是会正常运行的。这个条件测试失败不会让服务进入失败状态。条件是在服务开始运行时检查的。
ConditionPathExists=
是指定在服务启动时检查指定文件的存在状态。如果指定的绝对路径名不存在,这个条件的结果就是失败。如果绝对路径的带有!前缀,则条件反转,即只有路径不存在时服务才启动。selinux
, apparmor
, 和 smack。可以使用!进行反转判断。
Alias= :在安装使用应该使用的额外名字(即别名)。名字必须和服务本身有同样的后缀(即同样的类型)。这个选项可以指定多次,所有的名字都起作用,当执行 systemctl enable 命令时,会建立相当的链接。
WantedBy=
, RequiredBy= :在 .wants/
或 .requires/
子目录中为服务建立相应的链接。这样做的效果是当列表中的服务启动,本服务也会启动。 在 bar.service 中的 WantedBy=foo.service 和 Alias=foo.service.wants/bar.service 基本是一个意思。
Also= :当此服务安装时同时需要安装的附加服务。
如果用户请求安装的服务中配置了此项,则 systemctl enable 命令执行时会自动安装本项所指定的服务。在 [Install] 段使用这些字符串有特定含义: %n, %N, %p, %i, %U, %u, %m, %H, %b. 详细信息看下一段。、
特殊字符串
许多设置支持使用特殊的字符串,可以在运行或加载时替换成特定的内容。下表是支持的字符串。
字符串 | 简介 | 详细信息 |
---|---|---|
%n |
完整的服务名称 | |
%N |
不转义的完整服务名称 | |
%p |
前缀名 | 对于实例化的服务,这是前@前面的部分,对于其它的服务,是指去掉后缀(即类型)的部分。 |
%P |
不转义的前缀名 | |
%i |
实例名称 | 对于实例化的服务,这是指 @和后缀之间的部分。 |
%I |
不转义的实例名。 | |
%f |
不转义的文件名。 | 这可以不转义的实例名(如果可用)或前缀名,带有/前缀。 |
%c |
服务的控制组路径。? | |
%r |
systemd 的根控制组路径。? | |
%R |
systemd 的根控制组路径的父目录。 | |
%t |
运行时 Socket 目录。 | 这可以是 /run (系统管理器) 或 $XDG_RUNTIME_DIR (用户管理器). |
%u |
用户名 | 这是服务配置的用户或systemd运行实例的用户(如果没有配置的话)。 |
%U |
用户 UID | 这是服务配置的用户UID或systemd运行实例的用户UID(如果没有配置的话) |
%h |
用户家目录 | 这是服务配置的用户家目录或systemd运行实例的用户家目录(如果没有配置的话) |
%s |
用户Shell | 这是服务配置的用户shell或systemd运行实例的用户shell(如果没有配置的话) |
%m |
机器 ID | 运行系统的机器 ID ,格式是一个字符串。 |
%b |
启动 ID | 运行系统的启动 ID ,格式是一个字符串。. |
%H |
主机名 | 运行系统的主机名。 |
%% |
转义 % | 一个单百分号. |
systemd 的手册页:http://www.freedesktop.org/software/systemd/man
fedora 的 systemd 说明页面:http://fedoraproject.org/wiki/Packaging:Systemd,中文:https://fedoraproject.org/wiki/Systemd/zh-cn
unbuntu 的 systemd 说明页面:https://wiki.edubuntu.org/systemd
arch 的 systemd 说明页面:https://wiki.archlinux.org/index.php/Systemd/,中文:https://wiki.archlinux.org/index.php/Systemd_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
systemd服务内容详解的更多相关文章
- [转帖]Windows注册表内容详解
Windows注册表内容详解 来源:http://blog.sina.com.cn/s/blog_4d41e2690100q33v.html 对 windows注册表一知半解 不是很清晰 这里学习一下 ...
- 2-4、nginx特性及基础概念-nginx web服务配置详解
Nginx Nginx:engine X 调用了libevent:高性能的网络库 epoll():基于事件驱动event的网络库文件 Nginx的特性: 模块化设计.较好扩展性(不支持模块动态装卸载, ...
- Linux:SSH服务配置文件详解
SSH服务配置文件详解 SSH客户端配置文件 /etc/ssh/ssh——config 配置文件概要 Host * #选项“Host”只对能够匹配后面字串的计算机有效.“*”表示所有的计算机. For ...
- Nginx服务优化详解
Nginx服务优化详解 1.隐藏Nginx版本信息 编辑主配置文件nginx.conf,在http标签中添加代码 server_tokens off;来隐藏软件版本号. 2.更改Nginx服务启动的默 ...
- Windows注册表内容详解
Windows注册表内容详解 http://blog.sina.com.cn/s/blog_4d41e2690100q33v.html (2011-04-05 10:46:17) 第一课 注册表 ...
- pyhanlp 共性分析与短语提取内容详解
pyhanlp 共性分析与短语提取内容详解 简介 HanLP中的词语提取是基于互信息与信息熵.想要计算互信息与信息熵有限要做的是 文本分词进行共性分析.在作者的原文中,有几个问题,为了便于说明,这 ...
- (转)Nginx静态服务配置---详解root和alias指令
Nginx静态服务配置---详解root和alias指令 原文:https://www.jianshu.com/p/4be0d5882ec5 静态文件 Nginx以其高性能著称,常用与做前端反向代理服 ...
- GridView内容详解(转载)
GridView内容详解(转载) GridView是ASP.NET界面开发中的一个重要的控件,对GridView使用的熟练程度直接影响软件开发的进度及功能的实现.(车延禄)GridView的主要新特性 ...
- Nginx静态服务配置---详解root和alias指令
Nginx静态服务配置---详解root和alias指令 静态文件 Nginx以其高性能著称,常用与做前端反向代理服务器.同时nginx也是一个高性能的静态文件服务器.通常都会把应用的静态文件使用ng ...
随机推荐
- 【bzoj3678】wangxz与OJ
Portal -- > bzoj 3678 Solution 这题==真实智力康复qwq 然而众多神犇都说是10min写完的题我..可能写了近1h吧==深深感受到自己的弱小qwq (丢上来是因为 ...
- Qt ------ 再论事件循环
在介绍在以前,我们要认识两个术语: 可重入的(Reentrant):如果多个线程可以在同一时刻调用一个类的所有函数,并且保证每一次函数调用都引用一个唯一的数据,就称这个类是可重入的(Reentrant ...
- python基础之列表、字典、元祖等 (二)
一.作用域 if 1==1: name = 'weibinf' print name 下面的结论对吗? 外层变量,可以被内层变量使用 内层变量,无法被外层变量使用 二.三元运算 result = 值1 ...
- Splay 区间操作(二)
首先基本操作如下: 删除第rank个点 void Remove(int id){//删除第rank个点 rank++; int x = find(root, rank - 1); splay(x, 0 ...
- java project转变成java web project
首先,你的eclipse必须得装有web插件 1.找到项目工作空间目录,打开.project文件,并修改文件, 修改如下: 找到:<natures> </natures&g ...
- Asp.Net MVC +EF CodeFirst+多层程序设计
1.概述 这是一个基于个人博客的一个项目,虽然博客根本没必要做这么复杂的设计.但是公司有需求,所以先自己弄个项目练练手.项目需要满足下列需求 1.层与层之间需要解耦,在后期上线更新维护时不需要覆盖,只 ...
- 用shell获取目录/文件夹/文件的时间戳
命令: date +%s -r 目录名/文件名 输出内容形如: 1276225332
- POJ 2431 优先队列
汽车每过一单位消耗一单位油,其中有给定加油站可加油,问到达终点加油的最小次数. 做法很多的题,其中优先对列解这题是很经典的想法,枚举每个加油站,判断下当前油量是否小于0,小于0就在前面挑最大几个直至油 ...
- Mahout源码目录说明&&算法集
Mahout源码目录说明 mahout项目是由多个子项目组成的,各子项目分别位于源码的不同目录下,下面对mahout的组成进行介绍: 1.mahout-core:核心程序模块,位于/core目录下: ...
- ② 设计模式的艺术-02.简单工厂(Simple Factory)模式
工厂模式 实现了创建者和调用者的分离. 详细分类:简单工厂模式.工厂方法模式.抽象工厂模式 面向对象设计的基本原则 OCP(开闭原则,Open-Closed Principle):一个软件的实体应当对 ...