欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

linux中systemctl詳細(xì)理解及常用命令解析

 更新時(shí)間:2025年04月09日 09:39:06   作者:思維的深度  
systemd是Linux系統(tǒng)最新的初始化系統(tǒng)(init),作用是提高系統(tǒng)的啟動(dòng)速度,盡可能啟動(dòng)較少的進(jìn)程,盡可能更多進(jìn)程并發(fā)啟動(dòng),本文給大家介紹linux中systemctl詳細(xì)理解及常用命令,感興趣的朋友一起看看吧

一、systemctl理解

Linux 服務(wù)管理兩種方式service和systemctl

systemd是Linux系統(tǒng)最新的初始化系統(tǒng)(init),作用是提高系統(tǒng)的啟動(dòng)速度,盡可能啟動(dòng)較少的進(jìn)程,盡可能更多進(jìn)程并發(fā)啟動(dòng)。

systemd對(duì)應(yīng)的進(jìn)程管理命令是systemctl

1. systemctl命令兼容了service

即systemctl也會(huì)去/etc/init.d目錄下,查看,執(zhí)行相關(guān)程序

systemctl redis start
systemctl redis stop
# 開機(jī)自啟動(dòng)
systemctl enable redis

2. systemctl命令管理systemd的資源Unit

systemd的Unit放在目錄/usr/lib/systemd/system(Centos)或/etc/systemd/system(Ubuntu)

主要有四種類型文件.mount,.service,.target,.wants

.mount文件

.mount文件定義了一個(gè)掛載點(diǎn),[Mount]節(jié)點(diǎn)里配置了What,Where,Type三個(gè)數(shù)據(jù)項(xiàng)

等同于以下命令:

mount -t hugetlbfs /dev/hugepages hugetlbfs

.service文件

.service文件定義了一個(gè)服務(wù),分為[Unit],[Service],[Install]三個(gè)小節(jié)

[Unit]

Description:描述,

After:在network.target,auditd.service啟動(dòng)后才啟動(dòng)

ConditionPathExists: 執(zhí)行條件

[Service]

EnvironmentFile:變量所在文件

ExecStart: 執(zhí)行啟動(dòng)腳本

Restart: fail時(shí)重啟

[Install]

Alias:服務(wù)別名

WangtedBy: 多用戶模式下需要的

.target文件

.target定義了一些基礎(chǔ)的組件,供.service文件調(diào)用

.wants文件

.wants文件定義了要執(zhí)行的文件集合,每次執(zhí)行,.wants文件夾里面的文件都會(huì)執(zhí)行

二、常用命令

1.查看版本號(hào)

systemctl –-version

2.管理服務(wù)(unit)

systemctl 提供了一組子命令來管理單個(gè)的 unit,其命令格式為:

systemctl [command] [unit]

command 主要有:

start:立刻啟動(dòng)后面接的 unit。

stop:立刻關(guān)閉后面接的 unit。

restart:立刻關(guān)閉后啟動(dòng)后面接的 unit,亦即執(zhí)行 stop 再 start 的意思。

reload:不關(guān)閉 unit 的情況下,重新載入配置文件,讓設(shè)置生效。

enable:設(shè)置下次開機(jī)時(shí),后面接的 unit 會(huì)被啟動(dòng)。

disable:設(shè)置下次開機(jī)時(shí),后面接的 unit 不會(huì)被啟動(dòng)。

status:目前后面接的這個(gè) unit 的狀態(tài),會(huì)列出有沒有正在執(zhí)行、開機(jī)時(shí)是否啟動(dòng)等信息。

is-active:目前有沒有正在運(yùn)行中。

is-enabled:開機(jī)時(shí)有沒有默認(rèn)要啟用這個(gè) unit。

kill :不要被 kill 這個(gè)名字嚇著了,它其實(shí)是向運(yùn)行 unit 的進(jìn)程發(fā)送信號(hào)。

show:列出 unit 的配置。

mask:注銷 unit,注銷后你就無法啟動(dòng)這個(gè) unit 了。

unmask:取消對(duì) unit 的注銷。

我們先通過 etcd.service 來觀察服務(wù)類型 unit 的基本信息:

輸出內(nèi)容的第一行是對(duì) unit 的基本描述。

第二行中的 Loaded 描述操作系統(tǒng)啟動(dòng)時(shí)會(huì)不會(huì)啟動(dòng)這個(gè)服務(wù),enabled 表示開機(jī)時(shí)啟動(dòng),disabled 表示開機(jī)時(shí)不啟動(dòng)。而啟動(dòng)該服務(wù)的配置文件路徑為:/lib/systemd/system/etcd.service。

第三行 中的 Active 描述服務(wù)當(dāng)前的狀態(tài),active (running) 表示服務(wù)正在運(yùn)行中。如果是 inactive (dead) 則表示服務(wù)當(dāng)前沒有運(yùn)行。后面則是服務(wù)的啟動(dòng)時(shí)間。

第四行的 Docs 提供了在線文檔的地址。

下面的 Main PID 表示進(jìn)程的 ID,接下來是任務(wù)的數(shù)量,占用的內(nèi)存和 CPU 資源。

再下面的 Cgroup 描述的是 cgrpup 相關(guān)的信息,筆者會(huì)在后續(xù)的文章中詳細(xì)的介紹。

最后是輸出的日志信息。

關(guān)于 unit 的啟動(dòng)狀態(tài),除了 enable 和 disable 之外還有:

static:這個(gè) unit 不可以自己?jiǎn)?dòng),不過可能會(huì)被其它的 enabled 的服務(wù)來喚醒。

mask:這個(gè) unit 無論如何都無法被啟動(dòng)!因?yàn)橐呀?jīng)被強(qiáng)制注銷??赏ㄟ^ systemctl unmask 改回原來的狀態(tài)。

關(guān)于 unit 的運(yùn)行狀態(tài) Active,除了 active 和 inactive 之外還有:

active (exited):僅執(zhí)行一次就正常結(jié)束的服務(wù),目前并沒有任何程序在系統(tǒng)中執(zhí)行。舉例來說,開機(jī)或者是掛載時(shí)才會(huì)進(jìn)行一次的 quotaon 功能,就是這種模式! Quotaon 不需要一直執(zhí)行,只在執(zhí)行一次之后,就交給文件系統(tǒng)去自行處理。通常用 bash shell 寫的小型服務(wù),大多是屬于這種類型。

active (waiting):正在執(zhí)行當(dāng)中,不過還再等待其他的事件才能繼續(xù)處理。舉例來說,打印的相關(guān)服務(wù)就是這種狀態(tài)。

enable 和 disable 操作

比如我們?yōu)?etcd 服務(wù)創(chuàng)建了配置文件 /lib/systemd/system/etcd.service,然后執(zhí)行 enable 命令:

systemctl enable etcd.service

所謂的 enable 就是在 multi-user.target.wants 下面創(chuàng)建了一個(gè)鏈接文件:

至于為什么會(huì)鏈接到 multi-user.target.wants 目錄下,則是由 etcd.server 文件中的配置信息決定的。

查看 unit 的配置

使用 show 子命令可以查看 unit 的詳細(xì)配置情況:

 systemctl show etcd.service

注銷與反注銷 unit

如果我們想暫時(shí)的禁用某個(gè) unit,比如 etcd.service,可以注銷這個(gè) unit,注銷之后就無法再啟動(dòng)這個(gè)服務(wù)了:

systemctl mask etcd.service

從上圖中的輸出我們可以看到,所謂的注銷就是把 etcd.service 文件鏈接到 /dev/null 這個(gè)空設(shè)備中去了。所以就無法再啟動(dòng)該服務(wù)了。下面我們嘗試執(zhí)行一次反注銷:

systemctl unmask etcd.service

unmask 操作就是刪除掉 mask 操作中創(chuàng)建的鏈接。

查看系統(tǒng)上的 unit

systemctl 提供了子命令可以查看系統(tǒng)上的 unit,命令格式為:

systemctl [command] [--type=TYPE] [--all]

command 有:

list-units:列出當(dāng)前已經(jīng)啟動(dòng)的 unit,如果添加 -all 選項(xiàng)會(huì)同時(shí)列出沒有啟動(dòng)的 unit。

list-unit-files:根據(jù) /lib/systemd/system/ 目錄內(nèi)的文件列出所有的 unit。

--type=TYPE:可以過濾某個(gè)類型的 unit。

不帶任何參數(shù)執(zhí)行 systemctl 命令會(huì)列出所有已啟動(dòng)的 unit:

列舉已經(jīng)啟動(dòng)的unit

systemctl list-units (或者直接 sudo systemctl)

系統(tǒng)默認(rèn)啟動(dòng)的服務(wù)是非常多的,上圖只截取了前面幾行。下面是對(duì)輸出的介紹:

UNIT:項(xiàng)目的名稱,包括各個(gè) unit 的類別(看擴(kuò)展名)。

LOAD:開機(jī)時(shí) unit 的配置是否被加載。

ACTIVE:目前的狀態(tài),須與后續(xù)的 SUB 搭配!就是我們用 systemctl status 觀察時(shí),active的內(nèi)容。

DESCRIPTION:描述信息。

注意,systemctl 不加參數(shù),其實(shí)等同于 systemctl list-units

查看系統(tǒng)上一共裝了多個(gè)unit

???????systemctl list-unit-files

結(jié)果也非常的多,我們?nèi)匀恢唤厝∫徊糠纸Y(jié)果。這里的 STATE 就是我們前面介紹的 服務(wù)的啟動(dòng)狀態(tài),有 enable 和 disable、static 和 mask。

只查看某種類型的unit

比如我們只查看服務(wù)類型的unit:

systemctl list-units --type=service -all

查看加載失敗的 unit

如果發(fā)現(xiàn)某個(gè) unit 不工作,可以查看是否有 unit 加載失?。?/p>

???????systemctl --failed

管理不同的操作環(huán)境(target unit)

通過指定 --type=target 就可以用 systemctl list-units 命令查看系統(tǒng)中默認(rèn)有多少種 target:

我們?cè)诖藘H介紹幾個(gè)常用的 target。

graphical.target:就是文字界面再加上圖形界面,這個(gè) target 已經(jīng)包含了下面的 multi-user.target。

multi-user.target:純文本模式!

rescue.target:在無法使用 root 登陸的情況下,systemd 在開機(jī)時(shí)會(huì)多加一個(gè)額外的臨時(shí)系統(tǒng),與你原本的系統(tǒng)無關(guān)。這時(shí)你可以取得 root 的權(quán)限來維護(hù)你的系統(tǒng)。

emergency.target:緊急處理系統(tǒng)的錯(cuò)誤,在無法使用 rescue.target 時(shí),可以嘗試使用這種模式!

shutdown.target:就是執(zhí)行關(guān)機(jī)。

getty.target:可以設(shè)置 tty 的配置。

正常的模式是 multi-user.target 和 graphical.target 兩個(gè),救援方面的模式主要是 rescue.target 以及更嚴(yán)重的 emergency.target。如果要修改可提供登陸的 tty 數(shù)量,則修改 getty.target。

下面是操作 target unit 命令的格式:

systemctl [command] [unit.target]

command 有:

get-default:取得目前的 target。

set-default:設(shè)置后面接的 target 成為默認(rèn)的操作模式。

isolate:切換到后面接的模式。

查看和設(shè)置默認(rèn)的 target

systemctl get-default

切換 target

我們還可以在不重新啟動(dòng)的情況下切換不同的 target,比如從圖形界面切換到純文本的模式:

systemctl isolate multi-user.target

在一般情況下,使用上述 isolate 的方式即可完成不同 target 的切換。不過為了方便起見,systemd 也提供了

幾個(gè)簡(jiǎn)單的指令用來切換操作模式,大致如下所示:

sudo systemctl poweroff # 系統(tǒng)關(guān)機(jī)

sudo systemctl reboot  # 重新開機(jī)

sudo systemctl suspend  # 進(jìn)入暫停模式

sudo systemctl hibernate # 進(jìn)入休眠模式

sudo systemctl rescue  # 強(qiáng)制進(jìn)入救援模式

sudo systemctl emergency # 強(qiáng)制進(jìn)入緊急救援模式

這里簡(jiǎn)單介紹一下暫停模式與休眠模式的區(qū)別

suspend:暫停模式會(huì)將系統(tǒng)的狀態(tài)保存到內(nèi)存中,然后關(guān)閉掉大部分的系統(tǒng)硬件,當(dāng)然,并沒有實(shí)際關(guān)機(jī)。當(dāng)用戶按下喚醒機(jī)器的按鈕,系統(tǒng)數(shù)據(jù)會(huì)從內(nèi)存中回復(fù),然后重新驅(qū)動(dòng)被大部分關(guān)閉的硬件,所以喚醒系統(tǒng)的速度比較快。

hibernate:休眠模式則是將系統(tǒng)狀態(tài)保存到硬盤當(dāng)中,保存完畢后,將計(jì)算機(jī)關(guān)機(jī)。當(dāng)用戶嘗試喚醒系統(tǒng)時(shí),系統(tǒng)會(huì)開始正常運(yùn)行,然后將保存在硬盤中的系統(tǒng)狀態(tài)恢復(fù)回來。因?yàn)閿?shù)據(jù)需要從硬盤讀取,因此喚醒的速度比較慢(如果你使用的是 SSD 磁盤,喚醒的速度也是非??斓?。

檢查 unit 之間的依賴性

很多服務(wù)之間是有依賴關(guān)系的,systemd 的一大亮點(diǎn)就是可以管理 unit 之間的依賴關(guān)系。我們可以通過下面的命令來查看 unit 間的依賴關(guān)系:

systemctl list-dependencies [unit] [--reverse] 選項(xiàng) --reverse 會(huì)反向追蹤是誰在使用這個(gè) unit。

下面讓我們看看當(dāng)前運(yùn)行的 target 的依賴關(guān)系:

我們當(dāng)前運(yùn)行在 graphical.target 下,它由一個(gè)長長的依賴列表(上圖并未展示所有的項(xiàng)目),其中最重要的依賴項(xiàng)目為 multi-user.target。下面我們使用 --reverse 選項(xiàng)查看 multi-user.target unit 被誰使用:

systemctl list-dependencies multi-user.target --reverse

從上面兩張圖上我們可以確定下面的關(guān)系:graphical.target 依賴 multi-user.target。

我們這里只是通過 target unit 介紹了如何查看 unit 之間的依賴關(guān)系,實(shí)際使用中更多的是檢查服務(wù) unit 之間的依賴關(guān)系。

相關(guān)的目錄和文件

在不同的發(fā)行版中與 systemd 相關(guān)的文件路徑可能會(huì)不太一樣,強(qiáng)調(diào)一下,本文介紹的是 ubuntu 16.04 。

/lib/systemd/system/ 大多數(shù) unit 的配置文件都放在這個(gè)目錄下。

/run/systemd/system/ 系統(tǒng)運(yùn)行過程中產(chǎn)生的腳本,比如用戶相關(guān)的腳本和會(huì)話相關(guān)的腳本。

/etc/systemd/system/ 這個(gè)目錄中主要的文件都是指向 /lib/systemd/system/ 目錄中的鏈接文件。

注意,在我們自己創(chuàng)建 unit 配置文件時(shí),既可以把配置文件放在 /lib/systemd/system/ 目錄下,也可以放在 /etc/systemd/system/ 目錄下。

/etc/default/ 這個(gè)目錄中放置很多服務(wù)默認(rèn)的配置文件。

/var/lib/ 一些會(huì)產(chǎn)生數(shù)據(jù)的服務(wù)都會(huì)將他的數(shù)據(jù)寫入到 /var/lib/ 目錄中,比如 docker 相關(guān)的數(shù)據(jù)文件就放在這個(gè)目錄下。

/run/ 這個(gè)目錄放置了好多服務(wù)運(yùn)行時(shí)的臨時(shí)數(shù)據(jù),比如 lock file 以及 PID file 等等。

我們知道 systemd 里管理了很多會(huì)用到本機(jī) socket 的服務(wù),所以系統(tǒng)中肯定會(huì)產(chǎn)生很多的 socket 文件。那么,這些 socke 文件都存放在哪里呢?我們可以使用 systemctl 進(jìn)行查看:

systemctl list-sockets

其實(shí),絕大多數(shù)的 socket 文件都存放在 /run 目錄及其子目錄中。

systemctl daemon-reload 子命令

daemon-reload 是一個(gè)很容易被誤用的子命令,主要是因?yàn)樗种邪?daemon 一詞很容易讓它和 reload 子命令混淆。

我們?cè)谇拔暮?jiǎn)略的介紹了 reload 子命令,它的作用是重新加載某個(gè)服務(wù)程序的配置文件。這里的程序指的是服務(wù)類型 unit 的配置中指定的程序,也就是我們常說的 daemon(提供某種服務(wù)的應(yīng)用程序)。比如服務(wù)類型的 unit prometheus.service,提供服務(wù)的 daemon 程序在我的機(jī)器上是 /usr/local/share/prometheus/prometheus,所以 reload 子命令重新加載的是 prometheus 的配置文件。

如果把 daemon-reload 子命令中的 daemon 理解為 systemd 程序,就可以把這個(gè)命令解釋為重新加載 systemd 程序的配置文件。而所有的 unit 配置文件都是作為 systemd 程序的配置文件存在的。這樣得出的結(jié)論就是:

新添加 unit 配置文件時(shí)需要執(zhí)行 daemon-reload 子命令

有 unit 的配置文件發(fā)生變化時(shí)也需要執(zhí)行 daemon-reload 子命令

daemon-reload 命令會(huì)做很多的事情,其中之一是重新生成依賴樹(也就是 unit 之間的依賴關(guān)系),所以當(dāng)你修改了 unit 配置文件中的依賴關(guān)系后如果不執(zhí)行 daemon-reload 命令是不會(huì)生效的。

以上內(nèi)容整理:

Linux 服務(wù)管理兩種方式service和systemctl - 迪米特 - 博客園

http://www.dbjr.com.cn/article/136559.htm

到此這篇關(guān)于linux中systemctl詳細(xì)理解及常用命令的文章就介紹到這了,更多相關(guān)linux systemctl 命令內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談shell腳本中的控制流結(jié)構(gòu)

    淺談shell腳本中的控制流結(jié)構(gòu)

    今天小編就為大家分享一篇關(guān)于淺談shell腳本中的控制流結(jié)構(gòu),小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • shell腳本結(jié)合iptables防端口掃描的實(shí)現(xiàn)

    shell腳本結(jié)合iptables防端口掃描的實(shí)現(xiàn)

    這篇文章主要介紹了shell腳本結(jié)合iptables防端口掃描的實(shí)現(xiàn),中間使用了inotify-tools工具,需要的朋友可以參考下
    2014-05-05
  • shell腳本查看k8s日志介紹

    shell腳本查看k8s日志介紹

    大家好,本篇文章主要講的是shell腳本查看k8s日志介紹,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • shell腳本去重的三種方法小結(jié)

    shell腳本去重的三種方法小結(jié)

    在實(shí)際工作中,進(jìn)行Shell去重操作是非常常見的任務(wù)之一,本文主要介紹了shell腳本去重的三種方法小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • Linux下常用壓縮格式的壓縮與解壓方法詳解

    Linux下常用壓縮格式的壓縮與解壓方法詳解

    這篇文章主要介紹了Linux下常用壓縮格式的壓縮與解壓方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Shell腳本如何逐行處理文本文件

    Shell腳本如何逐行處理文本文件

    這篇文章主要給大家介紹了關(guān)于Shell腳本如何逐行處理文本文件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 阿里云主機(jī)一鍵安裝lamp、lnmp環(huán)境的shell腳本分享

    阿里云主機(jī)一鍵安裝lamp、lnmp環(huán)境的shell腳本分享

    這篇文章主要介紹了阿里云主機(jī)一鍵安裝lamp、lnmp環(huán)境的shell腳本分享,需要的朋友可以參考下
    2014-07-07
  • Linux使用watch命令實(shí)時(shí)查看容器狀態(tài)

    Linux使用watch命令實(shí)時(shí)查看容器狀態(tài)

    在現(xiàn)代的軟件開發(fā)和運(yùn)維中,Docker 容器技術(shù)已經(jīng)成為構(gòu)建、部署和運(yùn)行應(yīng)用程序的主流方式,隨著容器化技術(shù)的普及,監(jiān)控和管理容器的運(yùn)行狀態(tài)變得越來越重要,本文給大家介紹了Linux使用watch命令實(shí)時(shí)查看容器狀態(tài),需要的朋友可以參考下
    2024-12-12
  • shell參數(shù)換行與shell輸出換行的方法實(shí)例

    shell參數(shù)換行與shell輸出換行的方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于shell參數(shù)換行與shell輸出換行的方法實(shí)例,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-02-02
  • Shell中關(guān)于時(shí)間和日期的函數(shù)總結(jié)

    Shell中關(guān)于時(shí)間和日期的函數(shù)總結(jié)

    本文給大家詳細(xì)介紹了shell下關(guān)于時(shí)間和日期的函數(shù)總結(jié),本文給大家介紹的非常詳細(xì),具有參考借鑒價(jià)值,感興趣的朋友跟隨腳本之家小編一起看看吧
    2018-05-05

最新評(píng)論