关于system目录
linux 系统中有很多的 system 目录,常看到的有/etc/systemd/system、/lib/systemd/system以及/usr/lib/systemd/system等。
三者关系
/lib和/usr/lib一样
目录/lib/systemd/system以及/usr/lib/systemd/system其实指向的是同一目录。
在/目录下ll可知:
1 | |
[/usr]/lib/systemd/system/目录中包含的是软件包安装的单元,也就是说通过yum、dnf、rpm 等软件包管理命令管理的 systemd 单元文件,都放置在该目录下。
1 | |
/etc/systemd/system/与前二者关系
/etc/systemd/system/:系统管理员安装的单元,优先级更高
1 | |
在一般的使用场景下,每一个 Unit(服务等) 都有一个配置文件,告诉 Systemd 怎么启动这个 Unit 。
Systemd 默认从目录/etc/systemd/system/读取配置文件。但是,里面存放的大部分文件都是符号链接,指向目录/usr/lib/systemd/system/,真正的配置文件存放在/usr/lib/systemd/system/这个目录。
systemctl enable命令用于在上面两个目录之间,建立符号链接关系。
1 | |
如果配置文件里面设置了开机启动,systemctl enable命令相当于激活开机启动。
与之对应的,systemctl disable命令用于在两个目录之间,撤销符号链接关系,相当于撤销开机启动。
1 | |
虽然在/etc/systemd/system/目录下放置的是系统管理员安装的单元,但是实际使用过程中,用户可以自定义服务配置文件,并且放置在该目录,将该服务的配置文件的优先级提高。
比如在该目录下创建 redis.service 设置 redis 服务开机自启,见:Redis 安装配置。
扩展:/run/systemd/system目录
/run/systemd/system这个目录一般是进程在运行时动态创建 unit 文件的目录,一般很少修改,除非是修改程序运行时的一些参数时,即 Session 级别的,才在这里做修改。
优先级
systemd的使用大幅提高了系统服务的运行效率, 而unit的文件位置一般主要有三个目录:
1 | |
这三个目录的配置文件优先级依次从高到低,如果同一选项三个地方都配置了,优先级高的会覆盖优先级低的。
系统安装时,默认会将 unit 文件放在/lib/systemd/system目录。如果我们想要修改系统默认的配置,比如nginx.service,一般有两种方法:
- 在
/etc/systemd/system目录下创建nginx.service文件,里面写上我们自己的配置。 - 在
/etc/systemd/system下面创建nginx.service.d目录,在这个目录里面新建任何以.conf结尾的文件,然后写入我们自己的配置。推荐这种做法。
附systemd介绍
服务设定位置:
- /usr/lib/systemd/system/
- /run/systemd/system/
- /etc/systemd/system/(一般为连接文件)
服务统一管理:systemd
service设定文件:
- /usr/lib/systemd/system/*.service: 预设设定文件
- /etc/systemd/system/system/*.service.d/: 用户个性化设定文件,会被加入设定
- /etc/systemd/system/system/*.service.wants/: 连结文件,启动该服务后推荐启动的其他服务
- /etc/systemd/system/system/*.service.requires/: 连结文件,启动该服务之前,需要预先启动的服务
- /run/systemd/generator.late 使用 systemd-sysv-generator工具处理 SysV init脚本(即:/etc/init.d/*),自动生成.service文件