Centos7大管家systemctl

博文參考

http://www.178linux.com/48343
http://www.178linux.com/48674
http://www.178linux.com/48563
http://www.jinbuguo.com/systemd/index.html

systemd簡介

Systemd是由紅帽公司的一名叫作Lennart Poettering的員工開發,systemd是Linux系統中最新的初始化系統(init),它主要的設計目的是克服Sys V 固有的缺點,提升系統的啓動速度,systemd和upstart是競爭對手,ubantu上使用的是upstart的啓動方式,centos7上使用systemd替換了Sys V,Systemd目錄是要取代Unix時代依賴一直在使用的init系統,兼容SysV和LSB的啓動腳本,並且可以在進程啓動中更有效地引導加載服務。
system:系統啓動和服務器守護進程管理器,負責在系統啓動或運行時,激活系統資源,服務器進程和其餘進程,根據管理,字母d是守護進程(daemon)的縮寫,systemd這個名字的含義就是它要守護整個系統。

systemd新特性

系統引導時實現服務並行啓動

按需啓動守護進程

自動化的服務依賴關係管理

同時採用socket式與D-Bus總線式激活服務

系統狀態快照和恢復

利用Linux的cgroups監視進程

維護掛載點和自動掛載點

各服務間基於依賴關係進行精密控制

systemd核心概念

unit表示不一樣類型的sytemd對象,經過配置文件進行標識和配置,文件中主要包含了系統服務,監聽socket、保存的系統快照以及其餘與init相關的信息html

配置文件:linux

/usr/lib/systemd/system:每一個服務最主要的啓動腳本設置,相似於以前的/etc/initd.dshell

/run/system/system:系統執行過程當中所產生的服務腳本,比上面的目錄優先運行vim

/etc/system/system:管理員創建的執行腳本,相似於/etc/rc.d/rcN.d/Sxx類的功能,比上面目錄優先運行,在三者之中,此目錄優先級最高centos

Unit類型

systemctl -t help 查看unit類型

service unit:文件擴展名爲.service,用於定義系統服務

target unit:文件擴展名爲.target,用於模擬實現「運行級別」

device unit:.device,,用於定義內核識別的設備

mount unit .mount,定義文件系統掛載點

socket unit .socket,用於標識進程間通訊用的socket文件,也能夠在系統啓動時,延遲啓動服務,實現按需啓動

snapshot unit:.snapshot,關係系統快照

swap unit:.swap,用於表示swap設備

automount unit:.automount,文件系統的自動掛載點如:/misc目錄

path unit:.path,用於定義文件系統中的一個文件或目錄使用,經常使用於當文件系統變化時,延遲激活服務,如spool目錄

time  :.timer由systemd管理的計時器

clipboard.png

使用systemctl控制單元時,一般須要使用單元文件的全名,包括擴展名,可是有些單元能夠在systemctl中使用簡寫方式

若是無擴展名,systemctl默認把擴展名當作.service。例如netcfg和netcfg.service是等同的

掛載點會自動轉化爲相應的.mount單元,例如/home等價於home.mount

設備會自動轉化爲相應的.device單元,因此/dev/sd2等價於dev-sda2.device

關鍵特性

基於socket的激活機制:socket與服務進程分離

基於D-Bus的激活機制

基於device的激活機制

基於path的激活機制

系統快照:保存各unit的當前狀態信息於持久存儲設備中想後兼容sysv init腳本

不兼容

systemctl命令固定不變,不可擴展

非由systemd啓動的服務,systemctl無語與之通訊和控制,如:使用以前sys v風格管理的進程就沒法收
systemd控制

systemd基本工具

監視和控制systemd的主要命令是systemctl。該命令可用於查看系統狀態和管理系統及服務。

管理服務bash

命令: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

狀態:service name status–>systemctl status name.service

條件式重啓服務器

已啓動才重啓,不然不作任何操做

systemctl try-restart name.service

重載或重啓服務ssh

先加載,而後再啓動

systemctl reload-or-try-restart name.service

禁止自動和手動啓動socket

systemctl mask name.service

執行此條命令實則建立了一個連接ln -s '/dev/null' '/etc/systemd/system/sshd.service'

取消禁止工具

systemctl unmask name.service

刪除此前建立的連接

服務查看

查看某服務當前激活與否的狀態

systemctl is-active name.service

若是啓動會顯示active,不然會顯示unknown

查看全部已經激活的服務

systemctl list-units –t|–type service

clipboard.png

查看全部服務

clipboard.png

設定某服務開機啓動

chkconfig name on–>systemctl enable name.service

設定某服務開機禁止啓動

chkconfig name off –>systemctl disable name.service

查看全部服務的開機自啓狀態

chkconfig –list–>systemctl list-unit-files -t service

clipboard.png

用來列出該服務在那些運行級別下啓用或禁用

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

查看服務是否開機自啓

systemctl is-enabled name.servcice

查看服務的依賴關係

systemctl list-dependencies

clipboard.png

查看啓動失敗的服務

systemctl -failed -t service

查看服務單元的啓用和禁用狀態

systemctl list-unit-files –t=service

殺死進程

systemctl kill 進程名
clipboard.png

服務狀態

systemctl list-units -t service -a 顯示狀態

loaded:unit配置文件已處理

active(running):一次或屢次持續處理的運行

active(exited):成功完成一次性的配置

active(waiting):運行中,等待一個事件

inactive:不運行

enabled:開機啓動

disabled:開機不啓動

static:開機不啓動,但能夠被另外一個啓用的服務激活

clipboard.png

運行級別

target units:

unit配置文件:.target 以target結尾的文件

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

clipboard.png

查看依賴性

systemctl list-dependencies graphical.target

查看默認運行級別

systemctl get-default 在Sys V風格的系統上是查看/etc/inittab文件其中有一條id:5:initdefault:

級別切換

systemctl isolate muti-user.target

注意:只有當/lib/system/system/*.target文件中AllowIsolate=yes時才能奇幻(修改文件需執行systemctl daemon-reload生效)

設定默認運行級別

systemctl set-default muti-user.target   實則將multi-user.target連接至default.target

ls –l /etc/system/system/default.target

進入緊急救援模式

systemctl rescue

切換至emergency模式

systemctl emergency

在systemd風格的系統上還能使用sysv風格系統上的關機,重啓等命令,指示將該命令連接到systemctl的一個軟連接

關機:systemctl halt  systemctl poweroff

重啓:systemctl reboot

掛起:systemctl suspend

休眠:systemctl hibernate

休眠並掛起:systemctl hybrid-sleep

CentOS7引導順序

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

UEFi或BIOS初始化,運行POST開機自檢

選擇啓動設備

引導裝載程序, centos7是grub2

加載裝載程序的配置文件:/etc/grub.d/ /etc/default/grub /boot/grub2/grub.cfg(注:通常上修改grub.cfg配置文件,是直接修改/etc/default/grub,而後使用命令#grub2-mkconfig /boot/grub2/grub.cfg來生成修改 )

clipboard.png

使用systemctl控制單元時,一般須要使用單元文件的全名,包括擴展名,可是有些單元能夠在systemctl中使用簡寫方式

若是無擴展名,systemctl默認把擴展名當作.service。例如netcfg和netcfg.service是等同的

掛載點會自動轉化爲相應的.mount單元,例如/home等價於home.mount

設備會自動轉化爲相應的.device單元,因此/dev/sd2等價於dev-sda2.device
加載initramfs驅動模塊

加載內核選項

內核初始化,centos7使用systemd代替init

執行initrd.target全部單元,包括掛載/etc/fstab

從initramfs根文件系統切換到磁盤根目錄

systemd執行默認target配置,配置文件/etc/systemd/default.target /etc/systemd/system/

systemd執行sysinit.target初始化系統及basic.target準備操做系統

systemd啓動multi-user.target下的本機與服務器服務

systemd執行multi-user.target下的/etc/rc.d/rc.local

systemd執行multi-user.target下的getty.target及登入服務

systemd執行graphical須要的服務(此爲圖形界面全部)

unit文件格式

以#開頭的行後面的內容會被認爲是註釋

相關布爾值,一、yes、on、ture都是開啓,0、no、off、false都是關閉

時間單位默認是秒

Unit文件組成

[Unit]:定義與Unit類型無關的通用選項,用於提供unit的掃描信息,unit行爲及依賴關係等

 [Service]:與特定類型相關的專用選項;此處爲Service類型

 [Install]:定義由「systemctl enable及systemctl disable」命令在實現服務啓用或禁用時用到的一些選項

unit段經常使用選項

Description:描述信息

    After:定義unit的啓動次序,表示當前unit應該晚育那些unit啓動,其功能與before相反

    Requires:依賴到的其餘units,強依賴,被一來的units沒法激活時,當前unit即沒法激活

    Wants:依賴到的其餘units,弱依賴

    Conflicts:定義units間的衝突關係

Service段經常使用選項

Type:定義硬性ExecStart及相關參數的功能的unit進程啓動類型

    simple:默認值;這個daemon主要有ExecStart接的指令串來啓動,啓動後常駐於內存中

    forking:由ExecStart啓動的程序透過spawns延伸出其餘子程序來做爲此daemon的主要服務。原生父程序在啓動結束後就會終止

    onshot:用於執行一項任務,隨後當即退出的服務,不會常駐於內存中

    notify:與simple相同,但約定服務會在就緒後想systemd發送一個信號,須要配合NotifyAccess來讓Systemd接收消息

    idle:與simple相似,要執行這個daemon必需要全部的工做都順利執行完畢後纔會執行。這類的daemon一般是開機到最後才只能便可的服務

    EnvironmentFile:環境配置文件

    ExeStart:指明啓動unit要運行命令或腳本的絕對路徑

    ExeStartPre:ExecStart前運行

    ExeStartPost:ExecStart後運行

    ExecStop:指明中止unit要運行的命令或腳本

    Restart:當設定Restart=1時,則當次daemon服務意外終止後,會在此自動啓動此服務

Install段經常使用選項

Alias:別名,可以使用systemctl command Alial.service

    RequiredBy:被那些units所依賴,強依賴

    WantedBy:被那些units所依賴,弱依賴

    Also:安裝本服務的時候還要安裝別的相關服務

注意:對於新建立的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

設置內核參數

在系統啓動時,進入內核參數修改,修改隻影響當次啓動,在啓動時在linux16行後添加systemd.unit=desired.target

    systemd.unit=emergency.target進入救援模式

system.unit=recure.target  進入緊急救援模式,功能比emergency多

修改完成後使用ctrl+x啓動進入相應的模式

啓動排錯

文件系統損壞

先嚐試自動修復,若是失敗則須要進入emergency 模式,提示用戶修復

在/etc/fstab 不存在對應的設備和UUID,等待一段時間,若是不可用,進入emergecy shell 註釋哪行便可

在/etc/fstab不存在對應掛載點

systemd嘗試建立掛載點,不然提示進入emergecy shell

在/etc/fstab不正確的掛載選項

提示進入emergecy shell

破解root口令

啓動時任意鍵暫停啓動

按e鍵進入編輯模式

將光標移動linux16開始的行,添加內核參數rd.break

按ctrl-x啓動

mount -o remount,rw /sysroot

chroot /sysroot

passwd root

touch /.autorelabel

exit

reboot

等待系統從新打標籤後便可進入系統,這時候root的密碼已經更改

clipboard.png

修復grub2

GRUB「the Grand Unified Bootloader」

引導提示時可使用命令行界面

可從文件系統引導

主要配置文件/boot/grub2/grub.cfg

修復配置文件

grub2-mkconfig > /boot/grub2/grub.cfg

修復grub

grub2-install /dev/sda BIOS環境

grub2-install UEFI環境

grub2-mkconfig -o grub.cfg

重啓
相關文章
相關標籤/搜索