- RHCSARHCE 紅帽Linux認(rèn)證學(xué)習(xí)指南(第7版)EX200 & EX300
- (美)Michael Jang等
- 1556字
- 2020-11-29 00:30:09
認(rèn)證目標(biāo)5.04 按目標(biāo)控制
有了systemd, Red Hat企業(yè)版Linux的服務(wù)管理可按目標(biāo)進(jìn)行定制。因?yàn)閟ystemd包含到運(yùn)行級(jí)的鏈接,以實(shí)現(xiàn)與SysVinit向后兼容,所以仍然可以使用init和telinit等命令引用表5-2中列出的運(yùn)行級(jí)。但是,應(yīng)該讓自己熟悉目標(biāo),因?yàn)檫@是在引導(dǎo)時(shí)激活服務(wù)的標(biāo)準(zhǔn)方法。
Linux是可以高度定制化的,因此可以定制在每個(gè)目標(biāo)中啟動(dòng)的systemd單元。雖然可以使用GUI工具來(lái)定制systemd單元,但通常情況下在命令行接口配置它們速度會(huì)更快。
5.4.1 按目標(biāo)定義功能
如前所述,每一個(gè)目標(biāo)的基本功能都保存在/etc/systemd/systemd和/usr/lib/systemd/system目錄下的配置文件中。例如,我們首先看默認(rèn)目標(biāo),假設(shè)在RHEL 7系統(tǒng)中使用圖形化登錄:
# systemctl get-default graphical.target
由于存在從/etc/systemd/system/default.target文件到/usr/lib/system/system中的graphical.target文件的符號(hào)鏈接,系統(tǒng)知道graphical.target是默認(rèn)目標(biāo)。觀察這些文件。下面給出了一段節(jié)選:
[Unit] Description=Graphical Interface Documentation=man:systemd.special(7) Requires=multi-user.target After=multi-user.target Conflicts=rescue.target Wants=display-manager.service AllowIsolate=yes
這意味著一個(gè)目標(biāo)可以包含另一個(gè)目標(biāo)。這里,graphical.target是multi-user.target的一個(gè)超集。當(dāng)multi-user.target中的所有systemd單元都啟動(dòng)后,graphical.target會(huì)激活display-manager.service, graphical.target配置文件中的Wants指令說(shuō)明了這一點(diǎn)。
graphical.target啟動(dòng)的其他服務(wù)包含在/etc/systemd/system或/usr/lib/systemd/system下的graphical.target.wants子目錄中。在RHEL 7的默認(rèn)安裝中,可以看到下面的文件:
# ls /etc/systemd/system/graphical.target.wants accounts-daemon.service rtkit-daemon.service
它們是到Accounts和RealtimeKit服務(wù)的單元配置文件的符號(hào)鏈接。
5.4.2 systemd單元的內(nèi)部構(gòu)造
每當(dāng)系統(tǒng)移到一個(gè)不同的目標(biāo)時(shí),systemd單元就被激活。因此,在引導(dǎo)過(guò)程中將執(zhí)行與默認(rèn)目標(biāo)關(guān)聯(lián)的單元。修改目標(biāo)時(shí)將啟動(dòng)合適的單元;例如,當(dāng)從graphical.target運(yùn)行systemctl isolate multi-user.target命令時(shí),Linux將停止由圖形目標(biāo)啟動(dòng)的所有服務(wù)單元。
不過(guò),我們可以直接控制systemd單元。例如,查看/usr/lib/systemd/system目錄下的rsyslog.service文件的內(nèi)容,如圖5-12所示。

圖5-12 rsyslog.service單元的配置文件
該配置文件以Unit節(jié)開(kāi)頭,其中包含了該服務(wù)的描述。然后是服務(wù)配置,包含了服務(wù)的類型,指向包含一些環(huán)境變量(它們配置服務(wù)行為)的文件的指針,激活服務(wù)時(shí)需要運(yùn)行的主可執(zhí)行文件,以及將所有標(biāo)準(zhǔn)輸出從服務(wù)發(fā)送到/dev/null的一個(gè)指令。
最后,WantedBy指令指出,當(dāng)系統(tǒng)在引導(dǎo)期間進(jìn)入多用戶目標(biāo)時(shí),該服務(wù)將被激活。
現(xiàn)在執(zhí)行下面的命令:
# systemctl status rsyslog.service
如果指定了單元名稱,但不包含擴(kuò)展名,那么默認(rèn)情況下systemd假定這是一個(gè)服務(wù)單元。因此,上述命令的一個(gè)簡(jiǎn)短版本如下:
# systemctl status rsyslog
該命令返回的輸出如圖5-13所示,其中包含服務(wù)單元的狀態(tài)、其主進(jìn)程ID以及最多10條最近日志記錄行。如果一些日志記錄行被截?cái)啵墒褂?l開(kāi)關(guān)選項(xiàng)完整顯示它們。

圖5-13 顯示一個(gè)服務(wù)的狀態(tài)
執(zhí)行下面的命令可以停止一個(gè)服務(wù):
# systemctl stop rsyslog.service
另外,systemctl命令可以使用表5-4中顯示的選項(xiàng)。例如,下面的命令重新加載SSH配置文件,但是不會(huì)停止或啟動(dòng)服務(wù):
表5-4 systemctl服務(wù)控制命令

# systemctl reload sshd.service
5.4.3 服務(wù)配置
systemctl命令提供了一種簡(jiǎn)單的方式為默認(rèn)目標(biāo)啟動(dòng)服務(wù)。首先,執(zhí)行下面的命令:
# systemctl list-unit-files --type=service
其輸出如圖5-11所示,但是僅限于服務(wù)單元。你將看到系統(tǒng)中已安裝服務(wù)的完整列表,以及它們?cè)谝龑?dǎo)時(shí)的激活狀態(tài)。
systemctl命令的作用不止于此。使用該命令可以修改特定服務(wù)的引導(dǎo)狀態(tài)。例如,下面的命令檢查Postfix服務(wù)是否被配置為在引導(dǎo)時(shí)啟動(dòng):
# systemctl list-unit-files | grep postfix.service postfix.service enabled
下面是一個(gè)等效的命令:
# systemctl is-enabled postfix.service enabled
這說(shuō)明Postfix郵件服務(wù)器被配置為在默認(rèn)目標(biāo)中啟動(dòng)。如果想要確保Postfix服務(wù)不會(huì)在默認(rèn)目標(biāo)中啟動(dòng),可執(zhí)行下面的命令:
# systemctl disable postfix.service
再次運(yùn)行systemctl list-unit-files命令以確認(rèn)修改成功。為給默認(rèn)目標(biāo)再次啟用該服務(wù),可以執(zhí)行相同的命令,但是將disable替換為enable,如下所示:
# systemctl enable postfix.service
啟用一個(gè)服務(wù)時(shí),systemctl enable命令會(huì)在/etc/systemd/system/multi-user.target.wants目錄中創(chuàng)建一個(gè)指向/usr/lib/systemd/system中的對(duì)應(yīng)單元配置文件的符號(hào)鏈接。如果愿意,可以在合適的systemd目錄中創(chuàng)建符號(hào)鏈接,從而手動(dòng)啟用或禁用服務(wù)。但是,使用systemctl時(shí)出錯(cuò)的概率更小,所以是更好的方法。
禁用一個(gè)服務(wù)時(shí),仍然可以使用systemctl start和stop命令手動(dòng)啟用和停止該服務(wù)。這意味著systemctl disable命令不會(huì)阻止用戶不小心錯(cuò)誤地啟動(dòng)一個(gè)服務(wù)。如果想要在引導(dǎo)時(shí)禁用一個(gè)服務(wù)單元,并確保該服務(wù)單元不能再被啟動(dòng),應(yīng)該使用mask命令,如下所示:
# systemctl mask postfix.service ln -s '/dev/null' '/etc/systemd/system/postfix.service'
可以看到,此命令在/etc/systemd/system中創(chuàng)建了一個(gè)符號(hào)鏈接postfix.service,它指向/dev/null。/etc/systemd/system中的配置文件的優(yōu)先級(jí)總是高于/usr/lib/systemd/system中的對(duì)應(yīng)文件。因此,其結(jié)果是,/usr/lib/systemd/system中的默認(rèn)postfix.service文件將被/etc/systemd/system中的符號(hào)鏈接屏蔽為/dev/null。
- 操作系統(tǒng)實(shí)用教程(Linux版)
- 零起點(diǎn)學(xué)Linux系統(tǒng)管理
- UNIX操作系統(tǒng)設(shè)計(jì)
- 阿里云數(shù)字新基建系列:云原生操作系統(tǒng)Kubernetes
- 操作系統(tǒng)基礎(chǔ)與實(shí)踐:基于openEuler平臺(tái)
- 精通Linux內(nèi)核開(kāi)發(fā)
- 開(kāi)源安全運(yùn)維平臺(tái)OSSIM疑難解析:入門篇
- Extending Bootstrap
- 高性能Linux服務(wù)器構(gòu)建實(shí)戰(zhàn):系統(tǒng)安全、故障排查、自動(dòng)化運(yùn)維與集群架構(gòu)
- Python基礎(chǔ)教程(第3版)
- Linux就該這么學(xué)
- 零基礎(chǔ)學(xué)鴻蒙PC:新一代國(guó)產(chǎn)操作系統(tǒng)
- STM32庫(kù)開(kāi)發(fā)實(shí)戰(zhàn)指南:基于STM32F4
- Mastering Reactive JavaScript
- 計(jì)算機(jī)系統(tǒng):基于x86+Linux平臺(tái)