/etc/systemd/system和/lib/systemd/system的區別


linux系統中有很多的system目錄,在平常使用中或者大量的博客中,常看到的有/etc/systemd/system、/lib/systemd/system以及/usr/lib/systemd/system等,這三者有什么樣的關系呢,本文將三者的關系詳細說明,后續使用不再混淆。

簡介

目錄/lib/systemd/system以及/usr/lib/systemd/system其實指向的是同一目錄,在/目錄下ll可知:

[root@localhost /]# ll
total 28
lrwxrwxrwx.   1 root root    7 Jul  3 09:43 bin -> usr/bin
dr-xr-xr-x.   5 root root 4096 Jul 19 12:04 boot
drwxr-xr-x.  19 root root 3080 Jul 19 04:03 dev
drwxr-xr-x.  76 root root 8192 Jul 19 20:07 etc
drwxr-xr-x.   4 root root   39 Jul 19 04:37 home
lrwxrwxrwx.   1 root root    7 Jul  3 09:43 lib -> usr/lib
lrwxrwxrwx.   1 root root    9 Jul  3 09:43 lib64 -> usr/lib64
drwxr-xr-x.   2 root root    6 Apr 11  2018 media
drwxr-xr-x.   2 root root    6 Apr 11  2018 mnt
drwxr-xr-x.   3 root root   23 Jul  3 20:33 opt
dr-xr-xr-x. 118 root root    0 Jul 19 04:03 proc
dr-xr-x---.  10 root root 4096 Jul 20 06:31 root
drwxr-xr-x.  27 root root  760 Jul 19 16:00 run
lrwxrwxrwx.   1 root root    8 Jul  3 09:43 sbin -> usr/sbin
drwxr-xr-x.   2 root root    6 Apr 11  2018 srv
dr-xr-xr-x.  13 root root    0 Jul 19 04:03 sys
drwxrwxrwt.  10 root root 4096 Jul 20 03:37 tmp
drwxr-xr-x.  13 root root  155 Jul  3 09:43 usr
drwxr-xr-x.  21 root root 4096 Jul 19 13:34 var
  • [/usr]/lib/systemd/system/ 該目錄中包含的是軟件包安裝的單元,也就是說通過yum、dnf、rpm等軟件包管理命令管理的systemd單元文件,都放置在該目錄下。
[/usr]/lib/systemd/system/
The expectation is that `/lib/systemd/system` is a directory that should only contain systemd unit files which were put there by the package manager (YUM/DNF/RPM/APT/etc).
  • /etc/systemd/system/(系統管理員安裝的單元, 優先級更高)
Files in /etc/systemd/system are manually placed here by the operator of the system for ad-hoc software installations that are not in the form of a package. This would include tarball type software installations or home grown scripts.

在一般的使用場景下,每一個 Unit(服務等) 都有一個配置文件,告訴 Systemd 怎么啟動這個 Unit 。
Systemd 默認從目錄/etc/systemd/system/讀取配置文件。但是,里面存放的大部分文件都是符號鏈接,指向目錄/usr/lib/systemd/system/,真正的配置文件存放在這個目錄。 systemctl enable 命令用於在上面兩個目錄之間,建立符號鏈接關系。

$ sudo systemctl enable clamd@scan.service
# 等同於
$ sudo ln -s '/usr/lib/systemd/system/clamd@scan.service' '/etc/systemd/system/multi-user.target.wants/clamd@scan.service'

如果配置文件里面設置了開機啟動,systemctl enable命令相當於激活開機啟動。與之對應的,systemctl disable命令用於在兩個目錄之間,撤銷符號鏈接關系,相當於撤銷開機啟動。

$ sudo systemctl disable clamd@scan.service

雖然在/etc/systemd/system/目錄下放置的是系統管理員安裝的單元,但是實際使用過程中,用戶可以自定義服務配置文件,並且放置在該目錄,將該服務的配置文件的優先級提高。

優先級

systemd的使用大幅提高了系統服務的運行效率, 而unit的文件位置一般主要有三個目錄:

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 │
└────────────────────────┴─────────────────────────────┘

這三個目錄的配置文件優先級依次從高到低,如果同一選項三個地方都配置了,優先級高的會覆蓋優先級低的。

系統安裝時,默認會將unit文件放在/lib/systemd/system目錄。如果我們想要修改系統默認的配置,比如nginx.service,一般有兩種方法:

  1. /etc/systemd/system目錄下創建nginx.service文件,里面寫上我們自己的配置。
  2. /etc/systemd/system下面創建nginx.service.d目錄,在這個目錄里面新建任何以.conf結尾的文件,然后寫入我們自己的配置。推薦這種做法。

/run/systemd/system這個目錄一般是進程在運行時動態創建unit文件的目錄,一般很少修改,除非是修改程序運行時的一些參數時,即Session級別的,才在這里做修改。

附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文件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM