在接觸到Linux 的服務以後,我所知道的管理服務的方式有三種,分別是init
、service
、systemctl
。html
至於這三者之間的區別不得而知,因此整理這片筆記的目的就是了解這三者之間的區別。linux
歷史上,Linux 的啓動一直採用init 進程。nginx
在類Unix 的計算機操做系統中,Init(初始化的簡稱)是在啓動計算機系統期間啓動的第一個進程。網絡
Init 是一個守護進程,它將持續運行,直到系統關閉。它是全部其餘進程的直接或間接的父進程。操作系統
由於init 的參數全在/etc/init.d
目錄下,因此使用 init 啓動一個服務,應該這樣作:.net
$ sudo /etc/init.d/nginx start
經過查看man 手冊頁能夠得知,service是一個運行System V init
的腳本命令。設計
那麼什麼是 System V init 呢?
也就是/etc/init.d
目錄下的參數。日誌
因此分析可知service 是去/etc/init.d
目錄下執行相關程序,服務配置文件的存放目錄就是/etc/init.d
.code
使用 service 啓動一個服務htm
$ service nginx start
能夠理解成 service 就是init.d
的一種實現方式。
因此這二者啓動方式(或者是中止、重啓)並無什麼區別。
$ sudo /etc/init.d/nginx start // 等價於 $ service nginx start
可是這兩種方式均有以下缺點:
Systemd 就是爲了解決這些問題而誕生的。它包括 System and Service Manager,爲系統的啓動和管理提供一套完整的解決方案。
Systemd 是Linux 系統中最新的初始化系統(init),它主要的設計目的是克服 System V init
固有的缺點,提升系統的啓動速度。
根據 Linux 慣例,字母d是守護進程(daemon)的縮寫。 Systemd 這個名字的含義,就是它要守護整個系統。
使用了 Systemd,就不須要再用init 了。Systemd 取代了initd(Initd 的PID 是0) ,成爲系統的第一個進程(Systemd 的PID 等於 1),其餘進程都是它的子進程。
Systemd 的優勢是功能強大,使用方便,缺點是體系龐大,很是複雜。
查看Systemd 的版本信息
$ systemctl --version
Systemd 並非一個命令,而是一組命令,涉及到系統管理的方方面面。
systemctl是 Systemd 的主命令,用於管理系統。
// 重啓系統 $ sudo systemctl reboot // 啓動進入救援狀態(單用戶狀態) $ sudo systemctl rescue // 管理服務 $ sudo systemctl start nginx
hostnamectl命令用於查看當前主機的信息。
// 顯示當前主機信息 $ hostnamectl // 設置主機名 $ sudo hostnamectl set-hostname BoodeUbuntu
localectl命令用於查看本地化設置。
// 查看本地化設置 $ localectl // 設置本地化參數。 $ sudo localectl set-locale LANG=en_GB.utf8 $ sudo localectl set-keymap en_GB
timedatectl命令用於查看當前時區設置。
// 查看當前時區設置 $ timedatectl // 顯示全部可用的時區 $ timedatectl list-timezones // 設置當前時區 $ sudo timedatectl set-timezone America/New_York $ sudo timedatectl set-time YYYY-MM-DD $ sudo timedatectl set-time HH:MM:SS
init
是最初的進程管理方式service
是init
的另外一種實現systemd
則是一種取代 initd
的解決方案其中 systemctl
是 systemd
的主命令,用於管理系統以及服務。