iT邦幫忙

2023 iThome 鐵人賽

DAY 29
0

systemctl 與服務管理

在 Linux 的演進過程中,初始化系統(init system)一直扮演著非常重要的角色。它是負責控制和管理系統啟動過程中的各項任務和服務。傳統的 SysV init 是長期以來被多數的 Unix 系統所採用的初始化系統。然而,隨著雲端運算、容器技術和現代硬體的快速進步,SysV init 的一些設計和特性開始顯得有些陳舊和不足。

這促使了 systemd 的誕生。systemd 不僅提供了更加高效、快速的系統啟動方式,還提供了許多現代化的功能和特性,如同時啟動服務、系統資源控制、對錯誤的更好反應等。除此之外,systemd 的設計理念也更偏向於集中管理,將多個功能和元件都整合在一起,提供一個一致性的操作界面。這不僅簡化了系統管理的工作,也大大提高了系統的運行效率。

因此,從 Enterprise Linux 7 開始,多數的 Linux 發行版選擇放棄傳統的 SysV init,改用 systemd 作為默認的初始化系統。這一轉變不僅體現了技術的演進,也代表了 Linux 社群對於更好、更現代化的系統管理工具的追求。

systemd 與 SysV init 服務管理差異

在 Linux 的世界裡,服務管理一直是系統管理的重要任務之一。服務,或稱為背景服務(daemons),常常是系統啟動時就開始運行,負責處理網路請求、日誌記錄、硬體互動等工作。

在 Enterprise Linux 7 開始,systemd 成為了系統的主要初始化系統,取代了傳統的 SysV init 系統。systemd 不僅僅是一個初始化工具,它還提供了許多其他功能,例如管理 User Sessions、硬體、網路等。

其中,管理系統服務的主要工具是 systemctl。不同於傳統的 SysV init 系統,systemctl 提供了一個統一的方式來管理服務。您不再需要記住各種繁瑣的命令,只需要使用 systemctl 加上一些簡單的參數就可以完成大部分的服務管理工作。

以下是一個簡單的比較表,描述了如何使用 systemctl 和傳統的 SysV init 命令來執行一些常見的服務管理任務:

功能 Systemd (使用 systemctl) SysV init
啟動服務 systemctl start [service] service [service] start
停止服務 systemctl stop [service] service [service] stop
重新啟動服務 systemctl restart [service] service [service] restart
查看服務狀態 systemctl status [service] service [service] status
啟用自動啟動 systemctl enable [service] chkconfig [service] on
禁用自動啟動 systemctl disable [service] chkconfig [service] off
查看所有服務狀態 systemctl list-units --type=service chkconfig --list
查看活動日誌 journalctl -u [service] 查看 /var/log/ 目錄相關日誌
重新載入服務設定 systemctl reload [service] service [service] reload
立即停止並禁用服務 systemctl mask [service] 無直接對應功能

Systemd 和其 systemctl 工具主要在提供更靈活且強大的服務管理功能。它能更好地管理服務的相依性,提供了更多的診斷工具,並允許系統管理員更加精細地控制系統服務的行為。

使用 systemctl 管理服務

為了具體說明 systemctl 如何管理服務,我們將使用 httpd 服務作為示範。httpd 是 Apache HTTP 伺服器的服務名稱,在多數 Linux 發行版中都能找到。

透過下列方式可以安裝 httpd 並演練本節技巧:

student$ sudo dnf install -y httpd

完成套件安裝後,我們就可以開始使用 systemctl 操作 httpd 服務了。

以下是一些常見的 systemctl 指令與應用:

  1. 啟動 httpd 服務

    要啟動一個服務,可以使用 start 參數。對於 httpd 服務,指令如下:

    student$ sudo systemctl start httpd
    
  2. 停止 httpd 服務

    如果要停止正在運行的服務,可以使用 stop 參數:

    student$ sudo systemctl stop httpd
    
  3. 重新啟動 httpd 服務

    若需要重新啟動服務以應用設定更改。使用 restart 參數可以達到此目的:

    student$ sudo systemctl restart httpd
    
  4. 查看 httpd 服務狀態

    status 參數可以幫助我們查看服務的運行狀態,包括是否正在運行、當前的活動狀態以及最近的日誌訊息:

    student$ sudo systemctl status httpd
    

    輸出範例如下:

    ● httpd.service - The Apache HTTP Server
       Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
       Active: active (running) since Tue 2023-10-10 09:10:01 UTC; 2h 55min ago
     Main PID: 1234 (httpd)
       Status: "Total requests: 100; Current requests/sec: 0.5; Current traffic: 5KB/sec"
       Tasks: 60 (limit: 512)
      CGroup: /system.slice/httpd.service
              ├─1234 /usr/sbin/httpd -DFOREGROUND
              ├─1235 /usr/sbin/httpd -DFOREGROUND
              └─1236 /usr/sbin/httpd -DFOREGROUND
    
  5. 設定 httpd 服務開機啟動

    如果想讓服務在系統啟動時自動運行,我們可以使用 enable 參數:

    student$ sudo systemctl enable httpd
    
  6. 禁止 httpd 服務開機啟動

    要取消這個設定,則使用 disable 參數:

    student$ sudo systemctl disable httpd
    
  7. 重新載入 httpd 服務設定

    有時候我們修改了服務設定檔,而不需要重新啟動整個服務的時候,則可以使用 reload 參數讓服務讀取新的設定:

    student$ sudo systemctl reload httpd
    

以上只是 systemctlhttpd 服務互動的基礎。為了充分利用這兩者,建議深入閱讀官方文件和相關指引手冊,瞭解更多進階功能和設定選項。


上一篇
Day 28: systemd 開機機制
下一篇
Day 30: journal 與日誌檢查
系列文
Linux 升華:初學者的探索到專家的洞察30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言