文档章节

纠正自己对systemd的一个错误认知

 阿托
发布于 2014/07/05 12:17
字数 487
阅读 523
收藏 6

以前一直以为,systemd只会到/etc/systemd/system读取配置文件。要enable某个service就是copy service的配置文件到/etc/systemd/system目录下或者建一个symlinks。

昨天,想在启动时自动执行一个程序,自己写了个service文件放到/etc/systemd/system,发现没起作用。

看了一下systemd的手册

http://www.freedesktop.org/software/systemd/man/

其实下面目录都是systemd的读取目录。读取的优先次序是从上到下。

Table 1.  Load path when running in system mode (--system).
/etc/systemd/system/*
/run/systemd/system/*
/usr/lib/systemd/system/*

Table 2.  Load path when running in user mode (--user).                
$XDG_CONFIG_HOME/systemd/user/*
$HOME/.config/systemd/user/*
/etc/systemd/user/*
/run/systemd/user/*
/usr/lib/systemd/user/*

既然上面的目录都是systemd的读取目录,service的enable, disable是怎么回事呢?/usr/lib/systemd/system/下有所有安装的软件的配置,systemd如何来确定需要运行那个unit呢?

systemd的启动项是用unit文件来定义的。首先,每个unit都有Requires,Wants字段配置unit间的依赖关系。除unit文件定义外,每个unit都另外可以有一个配套的.requires/和.wants/ 目录,放到这两个目录里的unit会被隐式作为依赖项。

其次,unit文件里可以定义一个install节,描述该单元WantsBy,或RequiresBy哪个单元。当使用systemctl enable service时,就到WantsBy的单元的.wants目录建一个symlinks过来。类似的,RequiresBy也是这样。

因为/etc/systemd/system优先级最高,/etc/systemd/system目录下建立一些unit的.requires和.wants目录,然后systemctl在/etc/systemd/system对应目录下建立symlinks,就能保证不修改软件的安装文件的情况下,enable service,避免软件包升级时被覆盖。

最后,系统启动时systemd自动读取default.target这个unit,default.target定义了它的Requires和Wants,然后一路按依赖启动各项服务。





© 著作权归作者所有

共有 人打赏支持
粉丝 1
博文 19
码字总数 9070
作品 0
东城
为什么说编程认知比编程还更重要?

时隔四个月,因为各种工作的关系,有着很大量的新输入,但却一直没沉下心来,动笔输出点什么。 但是,四个月的时间所带来的成长是空前的。回过头来,我想首先对自己的过去的一些文字输出背后...

达尔文
2017/10/16
3.3K
23
通往财富自由之路(02)

《通往财富自由之路(01)》总结了五条与思维和行动转变相关的观点,今天再来总结下五个最应该掌握和运用的概念。 一、注意力是你最宝贵的财富 如何定义注意力?我有如下思考。 注意力是一段...

逗之煞
2017/07/27
0
0
程序员进步指南:从每一天少写一点 code 开始

Google 与网络的帮助可以让你写出一行又一行的代码。不过,若你只是复制贴上,事后并没有尝试了解背后的运作机制,充其量代表了「工作完成」。 那有什么办法可以让自己进步呢?也许你可以从少...

花仲马
2016/08/20
3.4K
9
我从《刻意练习》一书中学到的东西

看了两个月的刻意练习,终于有点心得,可以将知识变成指导行动的方法了,趁着还热乎,赶紧记下来! 练习,有目的的练习,刻意练习 不知道你有没有这种经历,有些人明明看起来很努力,却一直没...

闪电的蓝熊猫
05/27
0
0
《principles》读书总结

介绍 本书的作者是Ray Dalio,他是桥水基金的创始人,这本书中文翻译过来就叫「原则」,很简单的一个词,但其实很多时候越是重要的东西,听起来越是简单,这本书可以看做是作者六十多年人生经...

简xiaoyao
01/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Linux环境搭建 | VMware下共享文件夹的实现

在进行程序开发的过程中,我们经常要在主机与虚拟机之间传递文件,比如说,源代码位于虚拟机,而在主机下阅读或修改源代码,这里就需要使用到 「共享文件」 这个机制了。本文介绍了两种共享文...

良许Linux
今天
5
0
JUC锁框架——AQS源码分析

JUC锁介绍 Java的并发框架JUC(java.util.concurrent)中锁是最重要的一个工具。因为锁,才能实现正确的并发访问。而AbstractQueuedSynchronizer(AQS)是一个用来构建锁和同步器的框架,使用A...

长头发-dawn
今天
3
0
docker中安装了RabbitMQ后无法访问其Web管理页面

在官网找了"$ docker run -d --hostname my-rabbit --name some-rabbit -p 8080:15672 rabbitmq:3-management"这条安装命令,在docker上安装了RabbitMQ,,结果输入http://localhost:8080并不......

钟然千落
今天
4
1
spring-cloud | 分布式session共享

写在前面的话 各位小伙伴,你们有福了,这一节不仅教大家怎么实现分布式session的问题,还用kotlin开发,喜欢kotlin的小伙伴是不是很开心! 以前在写Android的时候,就对客户端请求有一定的认...

冯文议
今天
3
0
c语言之内存分配笔记

先看一个数组: short array[5] = {1,2} // 这儿定义的一个int类型的数组,数组第1和第2个元素值是1和2.其余后面默认会给值为0; 或者 short array[] = {1,2};//这儿数组第1和第2个元素,数组...

DannyCoder
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部