認識系統服務 (daemons)

 
daemon(守護進程;後臺程序)與服務:
 
系統爲了某些功能必需要提供一些服務 (不管是系統自己仍是網絡方面),這個服務就稱爲 service 。可是 service 的提供老是須要程序的運做,不然如何執行,因此達成這個 service 的程序咱們就稱呼他爲 daemon。
 
沒必要刻意去區分什麼是 daemon 與 service !事實上,能夠將這二者視爲相同!由於達成某個 service 是須要一支 daemon 在背景中運做, 沒有這支 daemon 就不會有 service !
 
 
 早期 System V 的 init 管理行爲中 daemon 的主要分類 (Optional)
 
啓動系統服務的管理方式被稱爲 SysV 的 init 腳本程序的處理方式!即系統核心第一支呼叫的程序是 init , 而後 init 去喚起全部的系統所須要的服務,不管是本地服務仍是網絡服務。
 
基本上 init 的管理機制有幾個特點:
 
 服務的啓動、關閉與觀察等方式:
    全部的服務啓動腳本統統放置於 /etc/init.d/ 底下,基本上都是使用 bash shell script 所寫成的腳本程序,須要啓動、關閉、從新啓動、觀察狀態時, 能夠透過以下的方式來處理:
    o 啓動:/etc/init.d/daemon start
    o 關閉:/etc/init.d/daemon stop
    o 從新啓動:/etc/init.d/daemon restart
    o 狀態觀察:/etc/init.d/daemon status
 
 服務啓動的分類:
    init 服務的分類中,依據服務是獨立啓動或被一隻總管程序管理而分爲兩大類:
    o 獨立啓動模式 (stand alone):服務獨立啓動,該服務直接常駐於內存中,提供本機或用戶的服務行爲,反應速度快。
    o 總管程序 (super daemon):由特殊的 xinetd 或 inetd 這兩個總管程序提供 socket 對應或 port 對應的管理。當沒有用戶要求某 socket 或 port 時, 所須要的服務是不會被啓動的。如有用戶要求時,xinetd 總管纔會去喚醒相對應的服務程序。當該要求結束時,這個服務也會被結束掉~ 由於透過xinetd 所總管,所以這個傢伙就被稱爲 super daemon。好處是能夠透過 super daemon 來進行服務的時程、聯機需求等的控制,缺點是喚醒服務須要一點時間的延遲。
 
 服務的相依性問題:
    服務是可能會有相依性的。init 在管理員本身手動處理這些服務時,是沒有辦法協助相依服務的喚醒的!
 
 執行等級的分類:
    init 是開機後核心主動呼叫的, 而後 init 能夠根據用戶自定義的執行等級 (runlevel) 來喚醒不一樣的服務,以進入不一樣的操做界面。基本上 Linux 提供 7 個執行等級,分別是 0, 1, 2...6 , 比較重要的是 1)單人維護模式、3)純文本模式、5)文字加圖形界面。而各個執行等級的啓動腳本是透過 /etc/rc.d/rc[0-6]/SXXdaemon 連結到 /etc/init.d/daemon , 連結檔名 (SXXdaemon) 的功能爲: S 爲啓動該服務,XX 是數字,爲啓動的順序。因爲有 SXX 的設定,所以在開機時能夠『依序執行』全部須要的服務,同時也能解決相依服務的問題。這點與管理員本身手動處理不太同樣就是了。
 
 
 制定執行等級默認要啓動的服務:
    若要創建如上提到的 SXXdaemon 的話,不須要管理員手動創建連結檔, 透過以下的指令能夠來處理默認啓動、預設不啓動、觀察預設啓動否的行爲:
    o 預設要啓動: chkconfig daemon on
    o 預設不啓動: chkconfig daemon off
    o 觀察預設爲啓動否: chkconfig --list daemon
 
 執行等級的切換行爲:
    當你要從純文本界面 (runlevel 3) 切換到圖形界面 (runlevel 5), 不須要手動啓動、關閉該執行等級的相關服務,只要『 init 5 』便可切換,init 這小子會主動去分析 /etc/rc.d/rc[35].d/ 這兩個目錄內的腳本, 而後啓動轉換 runlevel 中須要的服務~就完成總體的 runlevel 切換。
 
 
 
 
 systemd 使用的 unit 分類
 
CentOS 7.x 之後,Red Hat 系列的 distribution 放棄沿用多年的 System V 開機啓動服務的流程,改用 systemd 這個啓動服務管理機制。
 
好處:
 平行處理全部服務,加速開機流程:
    舊的 init 啓動腳本是『一項一項任務依序啓動』的模式,所以不相依的服務也是得要一個一個的等待。但目前咱們的硬件主機系統與操做系統幾乎都支持多核心架構,未相依的服務能同時啓動,systemd 就是可讓全部的服務同時啓動。
 
 一經要求就響應的 on-demand 啓動方式:
    systemd 所有就是僅有一隻 systemd 服務搭配 systemctl 指令來處理,無須其餘額外的指令來支持。不像system V 還要 init, chkconfig, service... 等等指令。
 
 服務相依性的自我檢查
    systemd 能夠自定義服務相依性的檢查並解決依賴。所以若是 B 服務是架構在 A 服務上面啓動的,那當你在沒有啓動 A 服務的狀況下僅手動啓動 B 服務時, systemd 會自動幫你啓動 A 服務喔!這樣就能夠免去管理員得要一項一項服務去分析的麻煩。
 
 依 daemon 功能分類:
    首先 systemd 先定義全部的服務爲一個服務單位 (unit),並將該 unit 歸類到不一樣的服務類型 (type) 去。舊的 init 僅分爲 stand alone 與 super daemon 實在不夠看。systemd 將服務單位 (unit) 區分爲 service, socket, target, path, snapshot, timer 等多種不一樣的類型(type)。
 
 將多個 daemons 集合成爲一個羣組:
    如同 systemV 的 init 裏頭有個 runlevel 的特點,systemd 亦將許多的功能集合成爲一個所謂的 target 項目,這個項目主要在設計操做環境的建置, 因此是集合了許多的 daemons,即執行某個 target 就是執行好多個 daemon 
 
 向下兼容舊有的 init 服務腳本:
    基本上, systemd 是能夠兼容於 init 的啓動腳本的,所以,舊的 init 啓動腳本也可以透過 systemd 來管理,只是更進階的 systemd 功能就沒有辦法支持。
 
可是,systemd 也是有些地方沒法徹底取代 init 。包括:
 在 runlevel 的對應上,大概僅有 runlevel 1, 3, 5 有對應到 systemd 的某些 target 類型而已,沒有所有對應;
 
 所有的 systemd 都用 systemctl 這個管理程序管理,而 systemctl 支持的語法有限制,不像/etc/init.d/daemon 就是純腳本能夠自定義參數,systemctl 不可自定義參數。;
 
 若是某個服務啓動是管理員本身手動執行啓動,而不是使用 systemctl 去啓動的 (例如你本身手動輸入crond 以啓動 crond 服務),那麼 systemd 將沒法偵測到該服務,而沒法進一步管理。
 
 systemd 啓動過程當中,沒法與管理員透過 standard input 傳入訊息!所以,自行撰寫 systemd 的啓動設定時,務必要取消互動機制~(連透過啓動時傳進的標準輸入訊息也要避免!)
 
 
 
systemd 的配置文件放置目錄:
 
基本上, systemd 將過去所謂的 daemon 執行腳本統統稱爲一個服務單位 (unit),而每種服務單位依據功能來區分時,就分類爲不一樣的類型 (type)。基本的類型有包括系統服務、數據監聽與交換的插槽檔服務 (socket)、儲存系統狀態的快照類型、提供不一樣相似執行等級分類的操做環境 (target) 等等。
 
配置文件都放置在如下目錄中:
 /usr/lib/systemd/system/:每一個服務最主要的啓動腳本設定,有點相似之前的 /etc/init.d 底下的文件;
 /run/systemd/system/:系統執行過程當中所產生的服務腳本,這些腳本的優先序要比 /usr/lib/systemd/system/ 高!
 /etc/systemd/system/:管理員依據主機系統的需求所創建的執行腳本,其實這個目錄有點像之前 /etc/rc.d/rc5.d/Sxx 之類的功能!執行優先序又比 /run/systemd/system/ 高!
 
也就是說,到底系統開機會不會執行某些服務實際上是看 /etc/systemd/system/ 底下的設定,因此該目錄底下就是一大堆連結檔。而實際執行的 systemd 啓動腳本配置文件, 其實都是放置在 /usr/lib/systemd/system/ 底下。
 
systemd 的 unit 類型分類說明:
/usr/lib/systemd/system/ 如下的數據按擴展名區分不一樣的類型 (type)。
常見的 systemd 的服務類型:
 
擴展名
主要服務功能
.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 更加有彈性!
其中又以 .service 的系統服務類型最多見,由於咱們一堆網絡服務都是透過這種類型來設計的。
 
 

 
 
透過 systemctl 管理服務
 
基本上, systemd 這個啓動服務的機制,主要是透過一隻名爲 systemctl 的指令來處理。
跟之前systemV 須要 service / chkconfig / setup / init 等指令來協助不一樣, systemd 就是僅有 systemctl 這個指令。
 
明確:服務啓動腳本 = unit;unit 根據擴展名劃分爲不一樣的 type;type 中的 target unit 是許多 unit 的集合;
 
 systemctl 管理單一服務 (service unit) 的啓動/開機啓動與觀察狀態
 
通常來講,服務的啓動有兩個階段,一個是『開機的時候設定要不要啓動這個服務』, 以及『你如今要不要啓動這個服務』
 
 
不該該使用 kill 的方式來關掉一個正常的服務!不然 systemctl 會沒法繼續監控該服務!
用 systemtctl status xxx 的輸出結果中,第 2, 3 兩行很重要~由於那個是告知咱們該 unit 下次開機會不會預設啓動,以及目前啓動的狀態!最底下是這個 unit 的登陸檔~若是你的這個 unit 曾經出錯過,觀察這個地方!【登陸文件信息格式爲:「時間」 「訊息發送主機」 「哪個服務的訊息」 「實際訊息內容」】
不少服務彼此之間是有相依性! 透過這個 mask 功能,能夠沒必要管其餘相依服務可能會啓動到這個想要關閉的服務。要取消的話只須要用 umask 命令。
 
Active 基本上有幾個常見的狀態:
  active (running):正有一隻或多隻程序正在系統中執行的意思,舉例來講,正在執行中的 vsftpd 就是這種
模式。
  active (exited):僅執行一次就正常結束的服務,目前並無任何程序在系統中執行。 舉例來講,開機或者
是掛載時纔會進行一次的 quotaon 功能,就是這種模式! quotaon 不須一直執行~只須執行一次以後,就
交給文件系統去自行處理囉!一般用 bash shell 寫的小型服務,大可能是屬於這種類型 (無須常駐內存)。
  active (waiting):正在執行當中,不過還再等待其餘的事件才能繼續處理。舉例來講,打印的隊列相關服務
就是這種狀態! 雖然正在啓動中,不過,也須要真的有隊列進來 (打印做業) 這樣他纔會繼續喚醒打印機
服務來進行下一步打印的功能。
  inactive:這個服務目前沒有運做的意思。
 
開機啓動的幾個狀態值:
 enabled:這個 daemon 將在開機時被執行
 disabled:這個 daemon 在開機時不會被執行
 static:這個 daemon 不能夠本身啓動 (enable 不可),不過可能會被其餘的 enabled 的服務來喚醒 (相依屬
性的服務)
 mask:這個 daemon 不管如何都沒法被啓動!由於已經被強制註銷 (非刪除)。可透過 systemctl unmask 方
式改回本來狀態
 
 
 systemctl 觀察系統上全部的服務
 
系統上面有多少的服務存在呢?這個時候就得要透過 list-units 及 list-unit-files 來觀察。
 
 
列字段
說明
UNIT
項目的名稱,包括各個 unit 的類別 (看擴展名)
LOAD
開機時是否會被加載,默認 systemctl 顯示的是有加載的項目而已!
ACTIVE
目前的狀態,須與後續的 SUB 搭配!就是咱們用 systemctl status 觀察時,active 的項目!
DESCRIPTION
詳細描述
systemctl 不加參數,其實預設就是 list-units 的意思。
 
使用 systemctl list-unit-files 會將系統上全部的服務統統列出來~而不像 list-units 僅以 unit 分類做大體的說明。至於 STATE 狀態就是開機是否會加載的那個狀態項目
 
 
 systemctl 管理不一樣的操做環境 (target unit)
 
 
跟操做界面相關性比較高的 target 主要有底下幾個:
 graphical.target:就是文字加上圖形界面,這個項目已經包含了底下的 multi-user.target 項目!
 multi-user.target:純文本模式!
 rescue.target:在沒法使用 root 登入的狀況下,systemd 在開機時會多加一個額外的暫時系統,與你本來的
系統無關。這時你能夠取得 root 的權限來維護你的系統。可是這是額外系統,所以可能須要動到 chroot 的
方式來取得你原有的系統喔!再後續的章節咱們再來談!
 emergency.target:緊急處理系統的錯誤,仍是須要使用 root 登入的狀況,在沒法使用 rescue.target 時,能夠嘗試使用這種模式!
 shutdown.target:就是關機的流程。
 getty.target:能夠設定你須要幾個 tty 之類的,若是想要下降 tty 的項目,能夠修改這個東西的配置文件!
 
正常的模式是 multi-user.target 以及 graphical.target 兩個,救援方面的模式主要是 rescue.target 以及更嚴重的 emergency.target。 若是要修改可提供登入的 tty 數量,則修改 getty.target 項目。
 
要注意,改變 graphical.target 以及 multi-user.target 是透過 isolate 來處理的。
 
切換操做模式:
 
 suspend:暫停模式會將系統的狀態數據保存到內存中,而後關閉掉大部分的系統硬件,固然,並無實際關機喔! 當用戶按下喚醒機器的按鈕,系統數據會重內存中回覆,而後從新驅動被大部分關閉的硬件,就開始正常運做!喚醒的速度較快。
 hibernate:休眠模式則是將系統狀態保存到硬盤當中,保存完畢後,將計算機關機。當用戶嘗試喚醒系統時,系統會開始正常運做, 而後將保存在硬盤中的系統狀態恢復回來。由於數據是由硬盤讀出,所以喚醒的效能與你的硬盤速度有關。
 
 
 systemctl 分析各服務之間的相依性
 
 
 
 systemd 的 daemon 運做過程相關的目錄簡介
 
跟系統的 daemon 運做有關的目錄基本上是這樣的:
 /usr/lib/systemd/system/:
使用 CentOS 官方提供的軟件安裝後,默認的啓動腳本配置文件都放在這裏,這裏的數據儘可能不要修改~要修改時,請到 /etc/systemd/system 底下修改較佳!
 
 /run/systemd/system/:
系統執行過程當中所產生的服務腳本,這些腳本的優先序要比 /usr/lib/systemd/system/ 高!
 
 /etc/systemd/system/:
管理員依據主機系統的需求所創建的執行腳本,其實這個目錄有點像之前 /etc/rc.d/rc5.d/Sxx 之類的功能!
執行優先序又比 /run/systemd/system/ 高喔!
 
 /etc/sysconfig/*:
幾乎全部的服務都會將初始化的一些選項設定寫入到這個目錄下,舉例來講,mandb 所要更新的 man page
索引中,須要加入的參數就寫入到此目錄下的 man-db 當中喔!而網絡的設定則寫在 /etc/sysconfig/network-scripts/ 這個目錄內。因此,這個目錄內的文件也是挺重要的;
 
 /var/lib/:
一些會產生數據的服務都會將他的數據寫入到 /var/lib/ 目錄中。舉例來講,數據庫管理系統 Mariadb 的數
據庫默認就是寫入 /var/lib/mysql/ 這個目錄下啦!
 
 /run/:
放置了好多 daemon 的暫存檔,包括 lock file 以及 PID file 等等。
 
網絡服務與端口口對應:
IP 就是表明你的主機在因特網上面的『門牌號碼』。 可是你的主機老是能夠提供很是多的網絡服務而不止一項功能而已,但咱們僅有一個 IP !當客戶端聯機過來咱們的主機時, 咱們主機是如何分辨不一樣的服務要求?那就是透過埠號 (port number) !埠號簡單的想象,他就是你家門牌上面的第幾層樓! 這個 IP 與 port 就是因特網聯機的最重要機制之一。
爲了統一整個因特網的端口號對應服務的功能,好讓全部的主機都可以使用相同的機制來提供服務與要求服務,因此就有了『通信協議』。
系統上面有沒有什麼設定可讓服務與埠號對應在一塊兒呢?查看文件 /etc/services 設定服務與埠號對應 :
 
 
什麼是網絡服務呢?基本上,會產生一個網絡監聽端口口 (port) 的程序,你就能夠稱他是個網絡服務了!
 
 

 
systemctl 針對 service 類型的配置文件
 
之前,咱們若是想要創建系統服務,就得要到 /etc/init.d/ 底下去創建相對應的 bash shell script 來處
理。
 
服務的管理是透過 systemd,而 systemd 的配置文件大部分放置於/usr/lib/systemd/system/ 目錄內。可是 Red Hat 官方文件指出, 該目錄的文件主要是本來軟件所提供的設定,建議不要修改!而要修改的位置應該放置於 /etc/systemd/system/ 目錄內。
 
舉例來講,若是你想要額外修改 vsftpd.service 的話, 他們建議要放置到哪些地方?
 
 /usr/lib/systemd/system/vsftpd.service:官方釋出的預設配置文件;
 
 /etc/systemd/system/vsftpd.service.d/custom.conf:在 /etc/systemd/system 底下創建與配置文件相同文件名的目錄,可是要加上 .d 的擴展名。而後在該目錄下創建配置文件便可。另外,配置文件最好附檔名取名爲 .conf較佳! 在這個目錄下的文件會『累加其餘設定』進入 /usr/lib/systemd/system/vsftpd.service 內喔!
 
 /etc/systemd/system/vsftpd.service.wants/*:此目錄內的文件爲連接檔,設定相依服務的連結。意思是啓動了vsftpd.service 以後,最好再加上這目錄底下建議的服務。
 
 /etc/systemd/system/vsftpd.service.requires/*:此目錄內的文件爲連接檔,設定相依服務的連結。意思是在啓動 vsftpd.service 以前,須要事先啓動哪些服務的意思。
 
 
配置文件大概可以將整個設定分爲三個部份,就是:
 [Unit]: unit 自己的說明,以及與其餘相依 daemon 的設定,包括在什麼服務以後才啓動此 unit 之類的設
定值,即這個項目與此 unit 的解釋、執行服務相依性有關;
 [Service], [Socket], [Timer], [Mount], [Path]..:不一樣的 unit type 就得要使用相對應的設定項目。咱們拿的是
sshd.service 來當模板,因此這邊就使用 [Service] 來設定。 這個項目內主要在規範服務啓動的腳本、環境配置文件檔名、從新啓動的方式等等。即這個項目與實際執行的指令參數有關。
 [Install]:這個項目就是將此 unit 安裝到哪一個 target 裏面去的意思!即這個項目說明此 unit 要掛載哪一個 target 底下。
 
配置文件內有些設定規則:
 設定項目一般是能夠重複的,例如我能夠重複設定兩個 After 在配置文件中,不過,後面的設定會取代前
面的喔!所以,若是你想要將設定值歸零, 可使用相似『 After= 』的設定,亦即該項目的等號後面什
麼都沒有,就將該設定歸零了 (reset)。
 若是設定參數須要有『是/否』的項目 (布爾值, boolean),你可使用 1, yes, true, on 表明啓動,用 0, no, false,off 表明關閉!隨你喜愛選擇囉!
 空白行、開頭爲 # 或 ; 的那一行,都表明批註!
[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 囉!
 
 
 
相關文章
相關標籤/搜索