CentOS7下Systemctl詳解

一礁遣、Systemd簡介

Systemd是由紅帽公司的一名叫做Lennart Poettering的員工開發(fā)郎逃,systemd是Linux系統(tǒng)中最新的初始化系統(tǒng)(init),它主要的設(shè)計(jì)目的是克服Sys V 固有的缺點(diǎn),提高系統(tǒng)的啟動速度,systemd和upstart是競爭對手怔软,ubantu上使用的是upstart的啟動方式垦细,centos7上使用systemd替換了Sys V,Systemd目錄是要取代Unix時(shí)代依賴一直在使用的init系統(tǒng)挡逼,兼容SysV和LSB的啟動腳本括改,而且能夠在進(jìn)程啟動中更有效地引導(dǎo)加載服務(wù)。
system:系統(tǒng)啟動和服務(wù)器守護(hù)進(jìn)程管理器家坎,負(fù)責(zé)在系統(tǒng)啟動或運(yùn)行時(shí)嘱能,激活系統(tǒng)資源,服務(wù)器進(jìn)程和其他進(jìn)程虱疏,根據(jù)管理惹骂,字母d是守護(hù)進(jìn)程(daemon)的縮寫,systemd這個(gè)名字的含義就是它要守護(hù)整個(gè)系統(tǒng)做瞪。

二对粪、Systemd新特性

  • 系統(tǒng)引導(dǎo)時(shí)實(shí)現(xiàn)服務(wù)并行啟動
  • 按需啟動守護(hù)進(jìn)程
  • 自動化的服務(wù)依賴關(guān)系管理
  • 同時(shí)采用socket式與D-Bus總線式激活服務(wù)
  • 系統(tǒng)狀態(tài)快照和恢復(fù)
  • 利用Linux的cgroups監(jiān)視進(jìn)程
  • 維護(hù)掛載點(diǎn)和自動掛載點(diǎn)
  • 各服務(wù)間基于依賴關(guān)系進(jìn)行精密控制

三、Systemd核心概念

  • Unit
    表示不同類型的sytemd對象装蓬,通過配置文件進(jìn)行標(biāo)識和配置著拭,文件中主要包含了系統(tǒng)服務(wù),監(jiān)聽socket牍帚、保存的系統(tǒng)快照以及其他與init相關(guān)的信息

  • 配置文件:
    /usr/lib/systemd/system:每個(gè)服務(wù)最主要的啟動腳本設(shè)置儡遮,類似于之前的/etc/initd.d
    /run/system/system:系統(tǒng)執(zhí)行過程中所產(chǎn)生的服務(wù)腳本,比上面的目錄優(yōu)先運(yùn)行
    /etc/system/system:管理員建立的執(zhí)行腳本暗赶,類似于/etc/rc.d/rcN.d/Sxx類的功能鄙币,比上面目錄優(yōu)先運(yùn)行,在三者之中蹂随,此目錄優(yōu)先級最高

四十嘿、Unit類型

  • systemctl -t help :查看unit類型

  • service unit:文件擴(kuò)展名為.service,用于定義系統(tǒng)服務(wù)

  • target unit:文件擴(kuò)展名為.target岳锁,用于模擬實(shí)現(xiàn)“運(yùn)行級別”

  • device unit: .device,用于定義內(nèi)核識別的設(shè)備

  • mount unit :.mount绩衷,定義文件系統(tǒng)掛載點(diǎn)

  • socket unit :.socket,用于標(biāo)識進(jìn)程間通信用的socket文件,也可以在系統(tǒng)啟動時(shí)浸锨,延遲啟動服務(wù),實(shí)現(xiàn)按需啟動

  • snapshot unit:.snapshot版姑,關(guān)系系統(tǒng)快照

  • swap unit:.swap柱搜,用于表示swap設(shè)備

  • automount unit:.automount,文件系統(tǒng)的自動掛載點(diǎn)如:/misc目錄

  • path unit:.path剥险,用于定義文件系統(tǒng)中的一個(gè)文件或目錄使用聪蘸,常用于當(dāng)文件系統(tǒng)變化時(shí),延遲激活服務(wù),如spool目錄

  • time:.timer由systemd管理的計(jì)時(shí)器

    注:使用systemctl控制單元時(shí)健爬,通常需要使用單元文件的全名控乾,包括擴(kuò)展名,但是有些單元可以在systemctl中使用簡寫方式娜遵,如果無擴(kuò)展名蜕衡,systemctl默認(rèn)把擴(kuò)展名當(dāng)做.service。例如netcfg和netcfg.service是等同的掛載點(diǎn)會自動轉(zhuǎn)化為相應(yīng)的.mount單元设拟,例如/home等價(jià)于home.mount設(shè)備會自動轉(zhuǎn)化為相應(yīng)的.device單元,所以/dev/sd2等價(jià)于dev-sda2.device

五、關(guān)鍵特性

  • 基于socket的激活機(jī)制:socket與服務(wù)進(jìn)程分離
  • 基于D-Bus的激活機(jī)制
  • 基于device的激活機(jī)制
  • 基于path的激活機(jī)制
  • 系統(tǒng)快照:保存各unit的當(dāng)前狀態(tài)信息于持久存儲設(shè)備中想后兼容sysv init腳本

六锋八、不兼容

  • systemctl命令固定不變磺浙,不可擴(kuò)展
  • 非由systemd啟動的服務(wù),systemctl無語與之通信和控制跑慕,如:使用之前sys v風(fēng)格管理的進(jìn)程就無法收systemd控制

七万皿、Systemd基本工具

監(jiān)視和控制systemd的主要命令是systemctl。該命令可用于查看系統(tǒng)狀態(tài)和管理系統(tǒng)及服務(wù)核行。

  • 管理服務(wù)
命令:systemctl  command name.service
啟動:service name start –>systemctl start name.service
停止:service name stop –>systemctl stop name.service
重啟:service name restart–>systemctl restart name.service
狀態(tài):service name status–>systemctl status name.service
  • 條件式重啟(已啟動才重啟牢硅,否則不做任何操作)
    systemctl try-restart name.service

  • 重載或重啟服務(wù)(先加載,然后再啟動)
    systemctl reload-or-try-restart name.service

  • 禁止自動和手動啟動
    systemctl mask name.service
    執(zhí)行此條命令實(shí)則創(chuàng)建了一個(gè)鏈接 ln -s '/dev/null' '/etc/systemd/system/sshd.service'

  • 取消禁止
    systemctl unmask name.service
    刪除此前創(chuàng)建的鏈接

  • 服務(wù)查看(查看某服務(wù)當(dāng)前激活與否的狀態(tài))
    systemctl is-active name.service
    如果啟動會顯示active钮科,否則會顯示unknown

  • 查看所有已經(jīng)激活的服務(wù)
    systemctl list-units –t|–type service

    image

  • 查看所有服務(wù)


    所有服務(wù)
  • 設(shè)定某服務(wù)開機(jī)啟動
    chkconfig name on–>systemctl enable name.service

設(shè)定某服務(wù)開機(jī)禁止啟動
chkconfig name off –>systemctl disable name.service

查看所有服務(wù)的開機(jī)自啟狀態(tài)
chkconfig –list–>systemctl list-unit-files -t service
[圖片上傳失敗...(image-fa8cbe-1519920006718)]

  • 用來列出該服務(wù)在那些運(yùn)行級別下啟用或禁用
chkconfig sshd –list –>ls /etc/system/system/*.wants/sshd.service
[root@www ~]# ls /etc/systemd/system/*.wants/sshd.service
/etc/systemd/system/multi-user.target.wants/sshd.service
  • 查看服務(wù)是否開機(jī)自啟
    systemctl is-enabled name.servcice

  • 查看服務(wù)的依賴關(guān)系
    systemctl list-dependencies

    查看依賴

  • 查看啟動失敗的服務(wù)
    systemctl -failed -t service

  • 查看服務(wù)單元的啟用和禁用狀態(tài)
    systemctl list-unit-files –t=service

  • 殺死進(jìn)程
    systemctl kill 進(jìn)程名
    [圖片上傳失敗...(image-53509-1519920006718)]

  • 服務(wù)狀態(tài)
    systemctl list-units -t service -a 顯示狀態(tài)
    loaded:unit配置文件已處理
    active(running):一次或多次持續(xù)處理的運(yùn)行
    active(exited):成功完成一次性的配置
    active(waiting):運(yùn)行中唤衫,等待一個(gè)事件
    inactive:不運(yùn)行
    enabled:開機(jī)啟動
    disabled:開機(jī)不啟動
    static:開機(jī)不啟動,但可以被另一個(gè)啟用的服務(wù)激活

    服務(wù)激活

  • 運(yùn)行級別
    target units:
    unit配置文件:.target 以target結(jié)尾的文件
    ls /usr/lib/system/system/*.target
    systemctl list-unit-files -type target -all
    0–>runlevel0.target, poweroff.target
    1–>runlevel1.target, rescue.target
    2–>runlevel2.target, muti-user.target
    3–>runlevel3.target, mutil-user.target
    4–>runlevel4.target, multi-user.target
    5–>runlevel5.target, graphical.target
    6–>runlevel6.target, reboot.target

    運(yùn)行級別

  • 查看依賴性
    systemctl list-dependencies graphical.target

  • 查看默認(rèn)運(yùn)行級別
    systemctl get-default 在Sys V風(fēng)格的系統(tǒng)上是查看/etc/inittab文件其中有一條id:5:initdefault:

  • 級別切換
    systemctl isolate muti-user.target
    注意:只有當(dāng)/lib/system/system/*.target文件中AllowIsolate=yes時(shí)才能奇幻(修改文件需執(zhí)行systemctl daemon-reload生效)

  • 設(shè)定默認(rèn)運(yùn)行級別
    systemctl set-default muti-user.target
    實(shí)則將multi-user.target鏈接至default.target
    ls –l /etc/system/system/default.target

  • 進(jìn)入緊急救援模式
    systemctl rescue

  • 切換至emergency模式
    systemctl emergency

  • 在systemd風(fēng)格的系統(tǒng)上還能使用sysv風(fēng)格系統(tǒng)上的關(guān)機(jī)绵脯,重啟等命令佳励,指示將該命令鏈接到systemctl的一個(gè)軟鏈接
    關(guān)機(jī):systemctl halt systemctl poweroff
    重啟:systemctl reboot
    掛起:systemctl suspend
    休眠:systemctl hibernate
    休眠并掛起:systemctl hybrid-sleep

CentOS7引導(dǎo)順序

  • CentOS啟動流程:
    POST –> Boot Sequence –> Bootloader –> kernel + initramfs(initrd) –> rootfs–> /sbin/init

  • UEFi或BIOS初始化,運(yùn)行POST開機(jī)自檢

  • 選擇啟動設(shè)備

  • 引導(dǎo)裝載程序, centos7是grub2

  • 加載裝載程序的配置文件:/etc/grub.d/ /etc/default/grub /boot/grub2/grub.cfg(注:一般上修改grub.cfg配置文件蛆挫,是直接修改/etc/default/grub赃承,然后使用命令#grub2-mkconfig /boot/grub2/grub.cfg來生成修改 )

    啟動設(shè)備

使用systemctl控制單元時(shí),通常需要使用單元文件的全名悴侵,包括擴(kuò)展名瞧剖,但是有些單元可以在systemctl中使用簡寫方式

如果無擴(kuò)展名,systemctl默認(rèn)把擴(kuò)展名當(dāng)做.service可免。例如netcfg和netcfg.service是等同的

掛載點(diǎn)會自動轉(zhuǎn)化為相應(yīng)的.mount單元抓于,例如/home等價(jià)于home.mount

設(shè)備會自動轉(zhuǎn)化為相應(yīng)的.device單元,所以/dev/sd2等價(jià)于dev-sda2.device
加載initramfs驅(qū)動模塊

加載內(nèi)核選項(xiàng)

內(nèi)核初始化浇借,centos7使用systemd代替init

執(zhí)行initrd.target所有單元捉撮,包括掛載/etc/fstab

從initramfs根文件系統(tǒng)切換到磁盤根目錄

systemd執(zhí)行默認(rèn)target配置,配置文件/etc/systemd/default.target /etc/systemd/system/

systemd執(zhí)行sysinit.target初始化系統(tǒng)及basic.target準(zhǔn)備操作系統(tǒng)

systemd啟動multi-user.target下的本機(jī)與服務(wù)器服務(wù)

systemd執(zhí)行multi-user.target下的/etc/rc.d/rc.local

systemd執(zhí)行multi-user.target下的getty.target及登入服務(wù)

systemd執(zhí)行g(shù)raphical需要的服務(wù)(此為圖形界面所有)

unit文件格式

以#開頭的行后面的內(nèi)容會被認(rèn)為是注釋
相關(guān)布爾值妇垢,1巾遭、yes肉康、on、ture都是開啟灼舍,0吼和、no、off骑素、false都是關(guān)閉
時(shí)間單位默認(rèn)是秒

Unit文件組成

  • [Unit]:定義與Unit類型無關(guān)的通用選項(xiàng)炫乓,用于提供unit的掃描信息,unit行為及依賴關(guān)系等
  • [Service]:與特定類型相關(guān)的專用選項(xiàng)砂豌;此處為Service類型
  • [Install]:定義由“systemctl enable及systemctl disable”命令在實(shí)現(xiàn)服務(wù)啟用或禁用時(shí)用到的一些選項(xiàng)

unit段常用選項(xiàng)

  • Description:描述信息

    After:定義unit的啟動次序厢岂,表示當(dāng)前unit應(yīng)該晚育那些unit啟動,其功能與before相反
    Requires:依賴到的其他units阳距,強(qiáng)依賴塔粒,被一來的units無法激活時(shí),當(dāng)前unit即無法激活
    Wants:依賴到的其他units筐摘,弱依賴
    Conflicts:定義units間的沖突關(guān)系

Service段常用選項(xiàng)

  • Type:定義硬性ExecStart及相關(guān)參數(shù)的功能的unit進(jìn)程啟動類型
  • simple:默認(rèn)值卒茬;這個(gè)daemon主要有ExecStart接的指令串來啟動,啟動后常駐于內(nèi)存中
  • forking:由ExecStart啟動的程序透過spawns延伸出其他子程序來作為此daemon的主要服務(wù)原生父程序在啟動結(jié)束后就會終止
  • onshot:用于執(zhí)行一項(xiàng)任務(wù)咖熟,隨后立即退出的服務(wù)圃酵,不會常駐于內(nèi)存中
  • notify:與simple相同,但約定服務(wù)會在就緒后想systemd發(fā)送一個(gè)信號馍管,需要配合NotifyAccess來讓Systemd接收消息
  • idle:與simple類似郭赐,要執(zhí)行這個(gè)daemon必須要所有的工作都順利執(zhí)行完畢后才會執(zhí)行。這類的daemon通常是開機(jī)到最后才只能即可的服務(wù)
  • EnvironmentFile:環(huán)境配置文件
  • ExeStart:指明啟動unit要運(yùn)行命令或腳本的絕對路徑
  • ExeStartPre:ExecStart前運(yùn)行
  • ExeStartPost:ExecStart后運(yùn)行
  • ExecStop:指明停止unit要運(yùn)行的命令或腳本
  • Restart:當(dāng)設(shè)定Restart=1時(shí)确沸,則當(dāng)次daemon服務(wù)意外終止后捌锭,會在此自動啟動此服務(wù)

Install段常用選項(xiàng)

  • Alias:別名(可使用systemctl command Alial.service)
    RequiredBy:被那些units所依賴,強(qiáng)依賴
    WantedBy:被那些units所依賴罗捎,弱依賴
    Also:安裝本服務(wù)的時(shí)候還要安裝別的相關(guān)服務(wù)
    注意:對于新創(chuàng)建的unit文件观谦,或者修改了的unit文件,要通知systemd重載次配置文件桨菜,而后可以選擇重啟:systemctl daemon-reload

案例

vim /etc/systemd/system/bak.service

[Unit]
Description=backup my etc
Requires=atd.service

[Service]
Type=simple
ExecStart=/bin/bash -c "echo /testdir/bak.sh|at now"

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start bak

設(shè)置內(nèi)核參數(shù)

在系統(tǒng)啟動時(shí)豁状,進(jìn)入內(nèi)核參數(shù)修改,修改只影響當(dāng)次啟動倒得,在啟動時(shí)在linux16行后添加systemd.unit=desired.target
systemd.unit=emergency.target 進(jìn)入救援模式
system.unit=recure.target 進(jìn)入緊急救援模式(功能比emergency多)
修改完成后使用ctrl+x啟動進(jìn)入相應(yīng)的模式

啟動排錯(cuò)

  • 文件系統(tǒng)損壞
    先嘗試自動修復(fù)泻红,如果失敗則需要進(jìn)入emergency 模式,提示用戶修復(fù)
    在/etc/fstab 不存在對應(yīng)的設(shè)備和UUID霞掺,等待一段時(shí)間谊路,如果不可用,進(jìn)入emergecy shell 注釋哪行即可
    在/etc/fstab不存在對應(yīng)掛載點(diǎn)systemd嘗試創(chuàng)建掛載點(diǎn)根悼,否則提示進(jìn)入emergecy shell
    在/etc/fstab不正確的掛載選項(xiàng)
    提示進(jìn)入emergecy shell

破解root口令

啟動時(shí)任意鍵暫停啟動
按e鍵進(jìn)入編輯模式
將光標(biāo)移動linux16開始的行凶异,添加內(nèi)核參數(shù)rd.break
按ctrl-x啟動

mount -o remount,rw /sysroot    
chroot /sysroot    
passwd root    
touch /.autorelabel    
exit   
reboot   

等待系統(tǒng)重新打標(biāo)簽后即可進(jìn)入系統(tǒng),這時(shí)候root的密碼已經(jīng)更改挤巡。


9.png

修復(fù)grub2

GRUB“the Grand Unified Bootloader”
引導(dǎo)提示時(shí)可以使用命令行界面剩彬,可從文件系統(tǒng)引導(dǎo)
主要配置文件/boot/grub2/grub.cfg
修復(fù)配置文件
grub2-mkconfig > /boot/grub2/grub.cfg
修復(fù)grub

grub2-install /dev/sda          #BIOS環(huán)境     
grub2-install                   #UEFI環(huán)境   
grub2-mkconfig -o grub.cfg  

重啟

博文參考

http://www.178linux.com/48343
http://www.178linux.com/48674
http://www.178linux.com/48563
http://www.jinbuguo.com/systemd/index.html
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市矿卑,隨后出現(xiàn)的幾起案子喉恋,更是在濱河造成了極大的恐慌,老刑警劉巖母廷,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件轻黑,死亡現(xiàn)場離奇詭異,居然都是意外死亡琴昆,警方通過查閱死者的電腦和手機(jī)氓鄙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來业舍,“玉大人抖拦,你說我怎么就攤上這事∠夏海” “怎么了态罪?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長下面。 經(jīng)常有香客問我复颈,道長,這世上最難降的妖魔是什么沥割? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任耗啦,我火速辦了婚禮,結(jié)果婚禮上驯遇,老公的妹妹穿的比我還像新娘芹彬。我一直安慰自己,他們只是感情好叉庐,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布舒帮。 她就那樣靜靜地躺著,像睡著了一般陡叠。 火紅的嫁衣襯著肌膚如雪玩郊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天枉阵,我揣著相機(jī)與錄音译红,去河邊找鬼。 笑死兴溜,一個(gè)胖子當(dāng)著我的面吹牛侦厚,可吹牛的內(nèi)容都是我干的耻陕。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼刨沦,長吁一口氣:“原來是場噩夢啊……” “哼诗宣!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起想诅,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤召庞,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后来破,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體篮灼,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年徘禁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了诅诱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡送朱,死狀恐怖逢艘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情骤菠,我是刑警寧澤它改,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站商乎,受9級特大地震影響央拖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鹉戚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一鲜戒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧抹凳,春花似錦遏餐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至幸冻,卻和暖如春粹庞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背洽损。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工庞溜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人碑定。 一個(gè)月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓流码,卻偏偏與公主長得像又官,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子漫试,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 啟動流程:POST --> Boot Sequence --> Bootloader --> kernel +in...
    尛尛大尹閱讀 1,013評論 0 1
  • muahao閱讀 2,064評論 0 3
  • 系統(tǒng)啟動是一項(xiàng)非常復(fù)雜的程序崖疤,因?yàn)閮?nèi)核得先檢測硬件并加載適當(dāng)?shù)尿?qū)動程序后秘车,接下來則必須要調(diào)用程序來準(zhǔn)備好系統(tǒng)運(yùn)行的...
    Zhang21閱讀 11,466評論 3 10
  • systemd攻略 轉(zhuǎn)自http://www.reibang.com/p/d5305104d03a或者這個(gè)http...
    x1596357閱讀 2,845評論 0 3
  • systemd攻略 相關(guān)文檔 arch 的 systemd 說明頁面 (簡體中文) fedora 的 system...
    muahao閱讀 11,602評論 0 12