Linux init、service、systemctl 三者區別

在接觸到Linux 的服務以後,我所知道的管理服務的方式有三種,分別是initservicesystemctlhtml

至於這三者之間的區別不得而知,因此整理這片筆記的目的就是了解這三者之間的區別。linux

init

歷史上,Linux 的啓動一直採用init 進程。nginx

在類Unix 的計算機操做系統中,Init(初始化的簡稱)是在啓動計算機系統期間啓動的第一個進程。網絡

Init 是一個守護進程,它將持續運行,直到系統關閉。它是全部其餘進程的直接或間接的父進程。操作系統

由於init 的參數全在/etc/init.d目錄下,因此使用 init 啓動一個服務,應該這樣作:.net

$ sudo /etc/init.d/nginx start

service

經過查看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

可是這兩種方式均有以下缺點:

  1. 啓動時間長。init 進程是串行啓動,只有前一個進程啓動完,纔會啓動下一個進程。
  2. 啓動腳本複雜。init進程只是執行啓動腳本,無論其餘事情。腳本須要本身處理各類狀況,這每每使得腳本變得很長。

systemd

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

systemctl是 Systemd 的主命令,用於管理系統。

// 重啓系統
$ sudo systemctl reboot

// 啓動進入救援狀態(單用戶狀態)
$ sudo systemctl rescue

// 管理服務
$ sudo systemctl start nginx

hostnamectl

hostnamectl命令用於查看當前主機的信息。

// 顯示當前主機信息
$ hostnamectl

// 設置主機名
$ sudo hostnamectl set-hostname BoodeUbuntu

localectl

localectl命令用於查看本地化設置。

// 查看本地化設置
$ localectl

// 設置本地化參數。
$ sudo localectl set-locale LANG=en_GB.utf8
$ sudo localectl set-keymap en_GB

timedatectl

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 是最初的進程管理方式
  • serviceinit 的另外一種實現
  • systemd 則是一種取代 initd 的解決方案

其中 systemctlsystemd 的主命令,用於管理系統以及服務。

參考連接

相關文章
相關標籤/搜索