现今多数Linux系统服务都使用了Systemd来管理, 在平常使用或看技术文章时,常看到以下四个system目录:
/lib/systemd/system
/usr/lib/systemd/system
/run/systemd/system
/etc/systemd/system
这四个目录有什么区别呢?
首先, /lib/systemd/system 和 /usr/lib/systemd/system 是同一个目录。
通过下面命令可以看到 /lib 目录指向了 /usr/lib。
rt@rangotec.com:~$ ll /lib
lrwxrwxrwx 1 root root 7 Sep 20 2022 /lib -> usr/lib
目录作用:
1. 目录: /usr/lib/systemd/system (/lib/systemd/system)
该目录是软件安装包安装的目录,也就是通过apt、rpm等软件管理命令管理的systemd单元文件,都放置在该目录下。
2. 目录: /run/systemd/system
软件运行时动态生成的配置文件,一般很少修改,除非是修改程序运行时的一些参数时,即 Session 级别的,才在这里做修改。
3. 目录: /etc/systemd/system
系统管理员安装的本地unit,也就是如果需要添加自己的unit可以再次创建对应的unit文件。
但实际上这个目录下大部分都是符号链接,指向 /usr/lib/systemd/system 。
如运行systemctl enable 就会在上面两个目录之间建立符号链接。
rt@rangotec.com:~$ sudo systemctl enable redis-server.service
// ... 其他略...
Created symlink /etc/systemd/system/redis.service → /lib/systemd/system/redis-server.service.
Created symlink /etc/systemd/system/multi-user.target.wants/redis-server.service → /lib/systemd/system/redis-server.service.
可以看到,程序自动创建了一个符号链接,从 etc目录 指向了 lib 目录:
/etc/systemd/system/redis.service -> /lib/systemd/system/redis-server.service
优先级:
Table 1. Load path when running in system mode (--system).
┌────────────────────────┬─────────────────────────────┐
│Path │ Description │
├────────────────────────┼─────────────────────────────┤
│/etc/systemd/system │ Local configuration │
├────────────────────────┼─────────────────────────────┤
│/run/systemd/system │ Runtime units │
├────────────────────────┼─────────────────────────────┤
│/lib/systemd/system │ Units of installed packages │
└────────────────────────┴─────────────────────────────┘
上面三个目录的配置文件的优先级依次从高到底, 如果三个目录都配置了同一个文件, 优先级高的覆盖优先级低的。即:本地配置文件优先级最高。
当安装软件时,如nginx时,系统默认将unit文件放到 /lib/system/system下。 如果我们需要修改nginx的unit文件, 一般有两种办法:
a. 在/etc/systemd/system目录下创建nginx.service文件,里面写上我们自己的配置。
b. 在/etc/systemd/system下面创建nginx.service.d目录,在这个目录里面新建任何以.conf 结尾的文件,然后写入我们自己的配置。
/run/systemd/system 目录通常是进程运行时动态创建 unit 文件的目录,一般很少需要修改。
作者:千古八方的玩具 https://www.bilibili.com/read/cv39859478/?jump_opus=1 出处:bilibili