擴展名
|
主要服務功能
|
.service
|
通常服務類型 (service unit):主要是系統服務,包括服務器自己所須要的本地服務以及網絡服務都是!比較常常被使用到的服務大可能是這種類型! 因此,這也是最多見的類型了!
|
.socket
|
內部程序數據交換的插槽服務 (socket unit):主要是 IPC (Inter-process communication) 的傳輸訊息插槽文件 (socket file) 功能。 這種類型的服務一般在監控訊息傳遞的插槽文件,當有透過此插槽文件傳遞訊息來講要連接服務時,就依據當時的狀態將該用戶的要求傳送到對應的 daemon, 若 daemon 還沒有啓動,則啓動該daemon 後再傳送用戶的要求。
使用 socket 類型的服務通常是比較不會被用到的服務,所以在開機時一般會稍微延遲啓動的時間 (由於比較沒有這麼經常使用嘛!)。通常用於本地服務比較多,例如咱們的圖形界面不少的軟件都是透過 socket 來進行本機程序數據交換的行爲。 (這與早期的xinetd 這個 super daemon 有部份的類似喔!)
|
.target
|
執行環境類型 (target unit):實際上是一羣 unit 的集合,例如 multi-user.target 其實就是一堆服務的集合~也就是說, 選擇執行 multi-user.target 就是執行一堆其餘 .service 或 .socket 之類的服務!
|
.mount
.automount
|
文件系統掛載相關的服務 (automount unit / mount unit):例如來自網絡的自動掛載、NFS 文件系統掛載等與文件系統相關性較高的程序管理。
|
.path
|
偵測特定文件或目錄類型 (path unit):某些服務須要偵測某些特定的目錄來提供隊列服務,例如最多見的打印服務,就是透過偵測打印隊列目錄來啓動打印功能! 這時就得要 .path 的服務類型支持了!
|
.timer
|
循環執行的服務 (timer unit):這個東西有點相似 anacrontab 喔!不過是由 systemd 主動提供的,比 anacrontab 更加有彈性!
|
列字段
|
說明
|
UNIT
|
項目的名稱,包括各個 unit 的類別 (看擴展名)
|
LOAD
|
開機時是否會被加載,默認 systemctl 顯示的是有加載的項目而已!
|
ACTIVE
|
目前的狀態,須與後續的 SUB 搭配!就是咱們用 systemctl status 觀察時,active 的項目!
|
DESCRIPTION
|
詳細描述
|
[Unit] 部份
|
|
設定參數
|
參數意義說明
|
Description
|
就是當咱們使用 systemctl list-units 時,會輸出給管理員看的簡易說明!固然,使用 systemctl status 輸出的此服務的說明,也是這個項目!
|
Documentation
|
這個項目在提供管理員可以進行進一步的文件查詢的功能!提供的文件能夠是以下的資料:
Documentation=
http://www....
Documentation=man:sshd(8)
Documentation=file:/etc/ssh/sshd_config
|
After
|
說明此 unit 是在哪一個 daemon 啓動以後才啓動的意思!基本上僅是說明服務啓動的順序而已,並無強制要求裏頭的服務必定要啓動後此 unit 才能啓動。 以 sshd.service 的內容爲例,該文件提到 After 後面有 network.target 以及 sshd-keygen.service,可是若這兩個 unit 沒有啓動而強制啓動 sshd.service 的話, 那麼 sshd.service 應該仍是可以啓動的!這與 Requires 的設定是有差別的喔!
|
Before
|
與 After 的意義相反,是在什麼服務啓動前最好啓動這個服務的意思。不過這僅是規範服務啓動的順序,並不是強制要求的意思。
|
Requires
|
明確的定義此 unit 須要在哪一個 daemon 啓動後纔可以啓動!就是設定相依服務啦!若是在此項設定的前導服務沒有啓動,那麼此 unit 就不會被啓動!
|
Wants
|
與 Requires 恰好相反,規範的是這個 unit 以後最好還要啓動什麼服務比較好!不過,並無明確的規範就是了!主要的目的是但願創建讓使用者比較好操做的環境。 所以,這個 Wants後面接的服務若是沒有啓動,其實不會影響到這個 unit 自己!
|
Conflicts
|
表明衝突的服務!亦即這個項目後面接的服務若是有啓動,那麼咱們這個 unit 自己就不能啓動!咱們 unit 有啓動,則此項目後的服務就不能啓動! 反正就是衝突性的檢查!
|
[Service] 部份
|
|
設定參數
|
參數意義說明
|
Type
|
說明這個 daemon 啓動的方式,會影響到 ExecStart 喔!通常來講,有底下幾種類型:
simple:默認值,這個 daemon 主要由 ExecStart 接的指令串來啓動,啓動後常駐於內存中。
forking:由 ExecStart 啓動的程序透過 spawns 延伸出其餘子程序來做爲此 daemon 的主要服務。原生的父程序在啓動結束後就會終止運做。 傳統的 unit 服務大多屬於這種項目,例如 httpd 這個 WWW 服務,當 httpd 的程序由於運做太久所以即將終結了,則 systemd 會再從新生出另外一個子程序持續運做後, 再將父程序刪除。聽說這樣的效能比較好!!
oneshot:與 simple 相似,不過這個程序在工做完畢後就結束了,不會常駐在內存中。
dbus:與 simple 相似,但這個 daemon 必需要在取得一個 D-Bus 的名稱後,纔會繼續運做!所以設定這個項目時,一般也要設定 BusName= 才行!
idle:與 simple 相似,意思是,要執行這個 daemon 必需要全部的工做都順利執行完畢後纔會執行。這類的 daemon 一般是開機到最後才執行便可的服務!比較重要的項目大概是 simple, forking 與 oneshot 了!畢竟不少服務須要子程序 (forking),而有更多的動做只須要在開機的時候執行一次(oneshot),例如文件系統的檢查與掛載啊等等的。
|
EnvironmentFile
|
能夠指定啓動腳本的環境配置文件!例如 sshd.service 的配置文件寫入到 /etc/sysconfig/sshd 當中!你也可使用 Environment= 後面接多個不一樣的 Shell 變量來給予設定!
|
ExecStart
|
就是實際執行此 daemon 的指令或腳本程序。你也可使用 ExecStartPre (以前) 以及ExecStartPost (以後) 兩個設定項目來在實際啓動服務前,進行額外的指令行爲。 可是你得要特別注意的是,指令串僅接受『指令 參數 參數...』的格式,不能接受 <, >, >>, |, & 等特殊字符,不少的 bash 語法也不支持喔! 因此,要使用這些特殊的字符時,最好直接寫入到指令腳本里面去!不過,上述的語法也不是徹底不能用,亦即,若要支持比較完整的 bash 語法,那你得要使用 Type=oneshot 才行喔! 其餘的 Type 纔不能支持這些字符。
|
ExecStop
|
與 systemctl stop 的執行有關,關閉此服務時所進行的指令。
|
ExecReload
|
與 systemctl reload 有關的指令行爲
|
Restart
|
當設定 Restart=1 時,則當此 daemon 服務終止後,會再次的啓動此服務。舉例來講,若是你在 tty2 使用文字界面登入,操做完畢後註銷,基本上,這個時候 tty2 就已經結束服務了。 可是你會看到屏幕又馬上產生一個新的 tty2 的登入畫面等待你的登入!那就是 Restart 的功能!除非使用 systemctl 強制將此服務關閉,不然這個服務會綿綿不斷的一直重複產生!
|
RemainAfterExit
|
當設定爲 RemainAfterExit=1 時,則當這個 daemon 所屬的全部程序都終止以後,此服務會再嘗試啓動。這對於 Type=oneshot 的服務頗有幫助!
|
TimeoutSec
|
若這個服務在啓動或者是關閉時,由於某些緣故致使沒法順利『正常啓動或正常結束』的狀況下,則咱們要等多久才進入『強制結束』的狀態!
|
KillMode
|
能夠是 process, control-group, none 的其中一種,若是是 process 則 daemon 終止時,只會終止主要的程序 (ExecStart 接的後面那串指令),若是是 control-group 時, 則由此 daemon 所產生的其餘 control-group 的程序,也都會被關閉。若是是 none 的話,則沒有程序會被關閉喔!
|
RestartSec
|
與 Restart 有點相關性,若是這個服務被關閉,而後須要從新啓動時,大概要 sleep 多少時間再從新啓動的意思。預設是 100ms (毫秒)。
|
[Install] 部份
|
|
設定參數
|
參數意義說明
|
WantedBy
|
這個設定後面接的大部分是 *.target unit !意思是,這個 unit 自己是附掛在哪個 target unit 底下的!通常來講,大多的服務性質的 unit 都是附掛在 multi-user.target 底下!
|
Also
|
當目前這個 unit 自己被 enable 時,Also 後面接的 unit 也請 enable 的意思!也就是具備相依性的服務能夠寫在這裏呢!
|
Alias
|
進行一個連結的別名的意思!當 systemctl enable 相關的服務時,則此服務會進行連結檔的創建!以 multi-user.target 爲例,這個傢伙是用來做爲預設操做環境 default.target 的規劃, 所以當你設定用成 default.target 時 , 這 個 /etc/systemd/system/default.target 就 會 連 結 到 /usr/lib/systemd/system/multi-user.target 囉!
|