官术网_书友最值得收藏!

認(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。

主站蜘蛛池模板: 黄山市| 手机| 内黄县| 宕昌县| 尼玛县| 汤阴县| 耿马| 托里县| 阳泉市| 晋城| 定南县| 会同县| 陆良县| 平顺县| 海门市| 吉隆县| 离岛区| 会昌县| 兰考县| 南京市| 鲁山县| 通榆县| 兰西县| 峡江县| 腾冲县| 宾川县| 万源市| 吉隆县| 习水县| 偏关县| 铜鼓县| 逊克县| 永春县| 游戏| 施甸县| 临沂市| 满城县| 夏津县| 抚顺市| 康平县| 临桂县|