服務管理基礎:systemctl
指令(啟動、停止、重新啟動服務)
1. Linux 中的服務是什麼?
服務是每個現代 Linux 發行版的基礎。想要啟動你的 Nginx 網頁伺服器嗎?啟動並設置對應的服務即可。想讓 MySQL 資料庫運行起來?這同樣是一個服務。甚至你喜愛的 cron
(用來執行讚爆的 bash 腳本)也是一個服務。管理服務是一個你不僅在工作上,甚至是個人項目中都必須習得的技能。順帶一提,面試中「你如何停止一個服務?」這個問題比你想像的更常見。
定義與角色
Linux 中的服務是一種在後台運行的程式(也稱為守護程式,來自英文 "daemon")。這些程式可以在系統啟動時自動運行,或者在需要時手動啟動。它們的主要任務包括:
- 處理網絡請求(例如
nginx
/apache
)。 - 支持遠程訪問(例如
openssh
)。 - 按計劃執行任務(例如
cron
)。
本質上,服務就是那些「無名英雄」,它們執行的任務用戶無法直接看到,但對系統的運行至關重要。
2. 使用 systemctl
進行服務管理基礎知識
什麼是 systemctl
?
讓我們先來了解一下 systemctl
,它是用於管理服務的主要指令,針對使用 systemd 的系統。如果你的系統運行在現代的 Linux 發行版上(例如 Ubuntu、Fedora 或 CentOS),那麼很可能你的系統就是使用 systemd
。
主要功能
- 啟動服務:啟動已停用的服務。
- 停止服務:關閉正在運行的服務。
- 重啟服務:先停止,再重新啟動服務。
- 檢查狀態:查看服務的當前狀態。
以下是指令的基本結構:
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
為例,進行一個綜合練習。
啟動
cron
服務:sudo systemctl start cron
檢查服務是否在運行:
sudo systemctl status cron
確認狀態為 "active (running)"。
停止
cron
服務:sudo systemctl stop cron
確認狀態變更為 "inactive (dead)"。
重啟
cron
服務:sudo systemctl restart cron
4. 活躍、停用以及錯誤狀態服務的區別
服務有不同的狀態。以下是主要類型:
- Active (running) — 服務正在運行,狀況一切正常。
- Inactive (dead) — 服務已停止。
- 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
就能搞定!
GO TO FULL VERSION