Linux 學習筆記 - Systemd
Gkfat 全端打雜工

有時難免會碰到網站掛掉,找到問題後發現是後端服務出錯的情況。身為純前端,這時通常會手足無措,因為必須等後端修復之後,才能回報 user。此時如果前端工程師能自行進入後端環境,做一些基本的偵錯處理,是否就能提升效率呢?


初步理解 Systemd

Systemd 是一個 Linux 的系統與服務管理器。當你們家的網站是架設在 Linux 環境,最好還是熟悉一下 systemd 比較好。

關於 Systemd 的一些粗淺整理:

  • 每一個系統服務稱為一個單元(unit)
  • Unit 有很多種類型:系統服務(.service)、掛載點(.mount)、sockets(.sockets) 、系統設備(.device)、交換分割區(.swap)、檔案路徑(.path)、啟動目標(.target)、由 systemd 管理的計時器(.timer
  • 大部分的伺服器都屬於 .service 類型
  • 可使用 systemctl 指令管理各項單元
  • 所有可用單元的路徑如下:
    1
    2
    3
    4
    5
    // 軟體包安裝的單元
    /usr/lib/systemd/system/

    // 系統管理員安裝的單元(優先級更高)
    /etc/systemd/system/

systemctl 指令

Systemctl 指令的結構如下:

1
$ systemctl 操作指令 <單元>

0. 分析系統狀態

  • 顯示系統狀態
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // 顯示系統狀態
    $ systemctl status

    // 顯示所有啟動中的單元
    $ systemctl
    // 或
    $ systemctl list-units

    // 顯示執行失敗的單元
    $ systemctl --failed

1. 啟動/停止單元

  • 啟動/停止單元
    1
    2
    3
    4
    5
    6
    7
    8
    // 啟動運行單元
    $ systemctl start <單元>

    // 停止運行單元
    $ systemctl stop <單元>

    // 重新啟動單元
    $ systemctl restart <單元>

2. 查找單元

  • 檢測系統單元狀態

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // 檢查單元狀態
    $ systemctl status <單元>

    // 檢查單元是否正在運行
    $ systemctl is-active <單元>

    // 檢查單元是否有設定開機自動啟動
    $ systemctl is-enabled <單元>

    // 檢查單元是否啟動失敗
    $ systemctl is-failed <單元>
  • 列出單元

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // 列出所有單元(包含已啟動/未啟動)
    $ systemctl list-units --all

    // 列出所有已啟動的單元
    $ systemctl list-units

    // 列出所有未啟動的單元
    $ systemctl list-units --all --state=inactive

    // 只列出系統上所有 service type 的單元
    $ systemctl list-units --type=service
  • 查看單元內部設定檔

    1
    $ systemctl cat <單元>

3. 進一步設定單元

  • 啟用、停用開機自動啟動單元

    1
    2
    3
    4
    5
    // 啟用開機自動啟動單元
    $ systemctl enable <單元>

    // 停用開機自動啟動單元
    $ systemctl disable <單元>
  • 禁用特定單元

    1
    2
    3
    4
    5
    // 禁用特定單元(禁用後就無法直接或間接啟動)
    $ systemctl mask <單元>

    // 取消禁用單元
    $ systemctl unmask <單元>

參考資料:

  • 文章標題:Linux 學習筆記 - Systemd
  • 文章作者:Gkfat
  • 撰寫時間:2022-03-12 20:27:53
  • 永久連結:https://gkfat.github.io/2022/03/12/linux-systemctl/
  • 版權宣告:這個網站所有文章均使用 BY-NC-SA 授權。