您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“l(fā)inux中systemd命令的運(yùn)行級(jí)別與其常見(jiàn)應(yīng)用”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“l(fā)inux中systemd命令的運(yùn)行級(jí)別與其常見(jiàn)應(yīng)用”吧!
運(yùn)行級(jí)別 vs. 狀態(tài)
SysVInit使用靜態(tài)的運(yùn)行級(jí)別來(lái)構(gòu)建不同的啟動(dòng)狀態(tài),大部分發(fā)布版本中提供了以下5個(gè)運(yùn)行級(jí)別:
單用戶模式(Single-user mode)
多用戶模式,不啟動(dòng)網(wǎng)絡(luò)服務(wù)(Multi-user mode without network services started)
多用戶模式,啟動(dòng)網(wǎng)絡(luò)服務(wù)(Multi-user mode with network services started)
系統(tǒng)關(guān)機(jī)(System shutdown)
系統(tǒng)重啟(System reboot)
對(duì)于我來(lái)說(shuō),使用多個(gè)運(yùn)行級(jí)別并沒(méi)有太大的好處,但它們卻一直在系統(tǒng)中存在著。 不同于運(yùn)行級(jí)別,systemd可以創(chuàng)建不同的狀態(tài),狀態(tài)提供了靈活的機(jī)制來(lái)設(shè)置啟動(dòng)時(shí)的配置項(xiàng)。這些狀態(tài)是由多個(gè)unit文件組成的,狀態(tài)又叫做啟動(dòng)目標(biāo)(target)。啟動(dòng)目標(biāo)有一個(gè)清晰的描述性命名,而不是像運(yùn)行級(jí)別那樣使用數(shù)字。unit文件可以控制服務(wù)、設(shè)備、套接字和掛載點(diǎn)。參考下/usr/lib/systemd/system/graphical.target,這是CentOS 7默認(rèn)的啟動(dòng)目標(biāo):
代碼如下:
[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
[Install]
Alias=default.target
現(xiàn)在再看看unit文件長(zhǎng)什么樣? 我來(lái)給大家找個(gè)例子。 unit文件存放在下面的兩個(gè)目錄下:
代碼如下:
/etc/systemd/system/
/usr/lib/systemd/system/
我們可以修改第一個(gè)目錄中的文件來(lái)進(jìn)行自定義配置,而第二個(gè)目錄中的文件是包安裝時(shí)保存的備份。/etc/systemd/system/的優(yōu)先級(jí)高于/usr/lib/systemd/system/。不錯(cuò),用戶優(yōu)先級(jí)高于機(jī)器。下面是Apache Web server的unit文件:
代碼如下:
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/usr/sbin/httpd/ $OPTIONS -DFOREGROUND
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
ExecStop=/bin/kill -WINCH ${MAINPID}
KillSignal=SIGCONT
PrivateTmp=true
[Install]
WantedBy=multi.user.target
就算是對(duì)于新手而言,上面的文件也是非常簡(jiǎn)單易懂的。這可比SysVInit的init文件要簡(jiǎn)單多了,為了便于比較,下面截取了/etc/init.d/apache2的一個(gè)片段:
代碼如下:
SCRIPTNAME="${0##*/}"
SCRIPTNAME="${SCRIPTNAME##[KS][0-9][0-9]}"
if [ -n "$APACHE_CONFDIR" ] ; then
if [ "${APACHE_CONFDIR##/etc/apache2-}" != "${APACHE_CONFDIR}" ] ; then
DIR_SUFFIX="${APACHE_CONFDIR##/etc/apache2-}"
else
DIR_SUFFIX=
整個(gè)文件一共有410行。
你可以檢查unit文件的依賴關(guān)系,我常常被這些復(fù)雜的依賴關(guān)系給嚇到:
代碼如下:
$ systemctl list-dependencies httpd.service
cgroups
cgroups,或者叫控制組,在Linux內(nèi)核里已經(jīng)出現(xiàn)好幾年了,但直到systemd的出現(xiàn)才被真正使用起來(lái)。The kernel documentation中是這樣描述cgroups的:“控制組提供層次化的機(jī)制來(lái)管理任務(wù)組,使用它可以聚合和拆分任務(wù)組,并管理任務(wù)組后續(xù)產(chǎn)生的子任務(wù)?!睋Q句話說(shuō),它提供了多種有效的方式來(lái)控制、限制和分配資源。systemd使用了cgroups,你可以便捷的查看它,使用下面的命令可以展示你系統(tǒng)中的整個(gè)cgroup樹(shù):
代碼如下:
$ systemd-cgls
你可以使用ps命令來(lái)進(jìn)行查看cgroup樹(shù):
代碼如下:
$ ps xawf -eo pid,user,cgroup,args
常用命令集
下面的命令行展示了如何為守護(hù)進(jìn)程重新裝載配置文件,注意不是systemd服務(wù)文件。 使用這個(gè)命令能夠激活新的配置項(xiàng),且盡可能少的打斷業(yè)務(wù)進(jìn)程,下面以Apache為例:
代碼如下:
# systemctl reload httpd.service
重新裝載服務(wù)文件(service file)需要完全停止和重新啟動(dòng)服務(wù)。如果服務(wù)掛死了,用下面的命令行可以恢復(fù)它:
代碼如下:
# systemctl restart httpd.service
你還可以用一個(gè)命令重啟所有的守護(hù)進(jìn)程。這個(gè)命令會(huì)重新裝載所有守護(hù)進(jìn)程的unit文件,然后重新生成依賴關(guān)系樹(shù):
代碼如下:
# systemctl daemon-reload
在非特權(quán)模式下,你也可以進(jìn)行重啟、掛起、關(guān)機(jī)操作:
代碼如下:
$ systemctl reboot
$ systemctl suspend
$ systemctl poweroff
到此,相信大家對(duì)“l(fā)inux中systemd命令的運(yùn)行級(jí)別與其常見(jiàn)應(yīng)用”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。