CodeGym /Adesua ahorow /Docker SELF /服務管理基礎: systemctl 指令(啟動、停止、重新啟動服務)

服務管理基礎: systemctl 指令(啟動、停止、重新啟動服務)

Docker SELF
等級 3 , 課堂 0
開放

服務管理基礎:systemctl 指令(啟動、停止、重新啟動服務)

1. Linux 中的服務是什麼?

服務是每個現代 Linux 發行版的基礎。想要啟動你的 Nginx 網頁伺服器嗎?啟動並設置對應的服務即可。想讓 MySQL 資料庫運行起來?這同樣是一個服務。甚至你喜愛的 cron(用來執行讚爆的 bash 腳本)也是一個服務。管理服務是一個你不僅在工作上,甚至是個人項目中都必須習得的技能。順帶一提,面試中「你如何停止一個服務?」這個問題比你想像的更常見。

定義與角色

Linux 中的服務是一種在後台運行的程式(也稱為守護程式,來自英文 "daemon")。這些程式可以在系統啟動時自動運行,或者在需要時手動啟動。它們的主要任務包括:

  • 處理網絡請求(例如 nginx/apache)。
  • 支持遠程訪問(例如 openssh)。
  • 按計劃執行任務(例如 cron)。

本質上,服務就是那些「無名英雄」,它們執行的任務用戶無法直接看到,但對系統的運行至關重要。


2. 使用 systemctl 進行服務管理基礎知識

什麼是 systemctl

讓我們先來了解一下 systemctl ,它是用於管理服務的主要指令,針對使用 systemd 的系統。如果你的系統運行在現代的 Linux 發行版上(例如 Ubuntu、Fedora 或 CentOS),那麼很可能你的系統就是使用 systemd

主要功能

  1. 啟動服務:啟動已停用的服務。
  2. 停止服務:關閉正在運行的服務。
  3. 重啟服務:先停止,再重新啟動服務。
  4. 檢查狀態:查看服務的當前狀態。

以下是指令的基本結構:

sudo systemctl [操作] [服務名稱]

啟動和停止服務

啟動:

假設你安裝了一個網頁伺服器 nginx 並希望啟動它。這時可以使用指令 start

sudo systemctl start nginx

停止:

如果你想暫時關閉網頁伺服器,可以使用指令 stop

sudo systemctl stop nginx

重啟服務

重啟的目的是應用配置的更改,或者簡單地讓服務 "刷新" 一下(就像給服務員端上一杯咖啡,提醒該繼續工作了)。使用指令 restart

sudo systemctl restart nginx

檢查狀態

不確定 nginx 是否正在運行?指令 status 可以提供詳細的信息:

sudo systemctl status nginx

執行結果顯示:

  • 進程的唯一識別碼 (PID)。
  • 啟動時間。
  • 錯誤日誌(如果發生錯誤)。

輸出範例:

nginx.service - A high performance web server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2023-11-01 09:00:00 UTC; 10min ago
   ...

3. 服務自動啟動

啟用自動啟動

為了讓服務在每次系統啟動時自動啟動,請使用以下指令:

sudo systemctl enable nginx

停用自動啟動

如果你希望服務在系統啟動時不再啟動,請使用:

sudo systemctl disable nginx

這是檢查自動啟動是否啟用的簡單方法:

systemctl is-enabled nginx

服務管理實踐

讓我們以 cron 為例,進行一個綜合練習。

  1. 啟動 cron 服務

    sudo systemctl start cron
    
  2. 檢查服務是否在運行

    sudo systemctl status cron
    

    確認狀態為 "active (running)"。

  3. 停止 cron 服務

    sudo systemctl stop cron
    

    確認狀態變更為 "inactive (dead)"。

  4. 重啟 cron 服務

    sudo systemctl restart cron
    

4. 活躍、停用以及錯誤狀態服務的區別

服務有不同的狀態。以下是主要類型:

  1. Active (running) — 服務正在運行,狀況一切正常。
  2. Inactive (dead) — 服務已停止。
  3. Failed — 啟動、停止或執行服務時發生了錯誤。

想快速找到所有處於錯誤狀態的服務,直接用這指令:

systemctl --failed

5. 常見錯誤與陷阱

錯誤: Unit not found

如果你收到類似以下的訊息:

Failed to start nginx.service: Unit nginx.service not found.

這可能表示你需要的服務未安裝,或者名稱輸入錯誤。檢查正確的名稱:

systemctl list-unit-files | grep nginx

權限錯誤

如果你忘了以 sudo 權限執行指令,很可能會遭到拒絕訪問:

Permission denied

記得在執行 systemctl 指令前加上 sudo


6. 在實際項目中的應用

服務管理是你在所有與 Linux 相關的職位中都會用到的技能:

  • DevOps: 自動化和管理所有系統服務。
  • 伺服器管理: 監控網頁伺服器、資料庫和其他服務的狀態。
  • Linux 開發: 你需要理解如何管理與你的項目相關的服務(例如,啟動開發伺服器)。

所以,瞭解 systemctl 指令不僅僅是抽象的技術,而是真正用於工作的工具。舉例來說:需要在網站更新後重啟網頁伺服器嗎?一個指令 sudo systemctl restart nginx 就能搞定!

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION