共計 2531 個字符,預計需要花費 7 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通
這篇文章將為大家詳細講解有關 linux 中如何使用 systemctl 命令,丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
一、systemctl 介紹
通常,Linux 的啟動一直采用 init 進程。
我們經常看到
$ sudo /etc/init.d/apache2 start
或者
$ service apache2 start
這種方法有兩個缺點:
一是啟動時間長。init 進程是串行啟動,只有前一個進程啟動完,才會啟動下一個進程。
二是啟動腳本復雜。init 進程只是執行啟動腳本,不管其他事情。腳本需要自己處理各種情況,這往往使得腳本變得很長。
為此,LINXU 設計引入了 Systemd
它的設計目標是,為系統的啟動和管理提供一套完整的解決方案。根據 Linux 慣例,字母 d 是守護進程(daemon)的縮寫。Systemd 這個名字的含義,就是它要守護整個系統。使用了 Systemd,就不需要再用 init 了。Systemd 取代了 initd,成為系統的第一個進程(PID 等于 1),其他進程都是它的子進程。
通過上圖的命令,我們可以查看 Systemd 版本。
總的來說,Systemd 的優點是功能強大,使用方便,缺點是體系龐大,非常復雜。事實上,現在還有很多人反對使用 Systemd,理由就是它過于復雜,與操作系統的其他部分強耦合,違反”keep simple, keep stupid”的 Unix 哲學。
上圖就是 Systemd 的架構圖,看著有點嚇人!
二、systemctl 命令
Systemd 并不是一個命令,而是一組命令,涉及到系統管理的方方面面。
下面我來介紹幾個常用的命令
# 啟動 redis 服務
$ sudo systemctl start redis
# 重啟 redis 服務
$ sudo systemctl restart redis
# 查看 redis 服務狀態
$ sudo systemctl status redis
# 重啟系統
$ sudo systemctl reboot
# 關閉系統,切斷電源
$ sudo systemctl poweroff
三、利用 systemctl 添加自定義服務
在日常開發中,我們難免搭建各種各樣的服務,這時,我們可以利用 systemctl 添加我們需要的服務。
以我的系統為例,配置服務可以到上圖的目錄中,system 存放了系統配置的服務,user 目錄存放用戶自定義配置的服務,當然,你也可以把服務放到 system 中
上圖是已經搭好的 ECF 服務,分別有 Unit、Service、Install 三個關鍵詞
[Unit]
Description : 服務的簡單描述
Documentation:服務文檔
Before、After: 定義啟動順序。Before=xxx.service, 代表本服務在 xxx.service 啟動之前啟動。After=xxx.service, 代表本服務在 xxx.service 之后啟動。
Requires:這個單元啟動了,它需要的單元也會被啟動;它需要的單元被停止了,這個單元也停止了。
Wants:推薦使用。這個單元啟動了,它需要的單元也會被啟動;它需要的單元被停止了,對本單元沒有影響。
[Service]
Type=simple(默認值):systemd 認為該服務將立即啟動。服務進程不會 fork。如果該服務要啟動其他服務,不要使用此類型啟動,除非該服務是 socket 激活型。
Type=forking:systemd 認為當該服務進程 fork,且父進程退出后服務啟動成功。對于常規的守護進程(daemon),除非你確定此啟動方式無法滿足需求,使用此類型啟動即可。使用此啟動類型應同時指定 PIDFile=,以便 systemd 能夠跟蹤服務的主進程。
Type=oneshot:這一選項適用于只執行一項任務、隨后立即退出的服務。可能需要同時設置 RemainAfterExit=yes 使得 systemd 在服務進程退出之后仍然認為服務處于激活狀態。
Type=notify:與 Type=simple 相同,但約定服務會在就緒后向 systemd 發送一個信號。這一通知的實現由 libsystemd-daemon.so 提供。
Type=dbus:若以此方式啟動,當指定的 BusName 出現在 DBus 系統總線上時,systemd 認為服務就緒。
Type=idle: systemd 會等待所有任務(Jobs) 處理完成后,才開始執行 idle 類型的單元。除此之外,其他行為和 Type=simple 類似。
PIDFile:pid 文件路徑
ExecStart:指定啟動單元的命令或者腳本,ExecStartPre 和 ExecStartPost 節指定在 ExecStart 之前或者之后用戶自定義執行的腳本。Type=oneshot 允許指定多個希望順序執行的用戶自定義命令。
ExecReload:指定單元停止時執行的命令或者腳本。
ExecStop:指定單元停止時執行的命令或者腳本。
PrivateTmp:True 表示給服務分配獨立的臨時空間
Restart:這個選項如果被允許,服務重啟的時候進程會退出,會通過 systemctl 命令執行清除并重啟的操作。
RemainAfterExit:如果設置這個選擇為真,服務會被認為是在激活狀態,即使所以的進程已經退出,默認的值為假,這個選項只有在 Type=oneshot 時需要被配置。
[Install]
Alias:為單元提供一個空間分離的附加名字。
RequiredBy:單元被允許運行需要的一系列依賴單元,RequiredBy 列表從 Require 獲得依賴信息。
WantBy:單元被允許運行需要的弱依賴性單元,Wantby 從 Want 列表獲得依賴信息。
Also:指出和單元一起安裝或者被協助的單元。
DefaultInstance:實例單元的限制,這個選項指定如果單元被允許運行默認的實例。
關于“linux 中如何使用 systemctl 命令”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
向 AI 問一下細節
丸趣 TV 網 – 提供最優質的資源集合!