新聞中心
目錄
一、systemd的由來
二、systemd
三、服務(wù)管理
1、systemctl2
2、服務(wù)查看
3、服務(wù)狀態(tài)
4、hostnamectl
5、localectl
6、 timedatectl
7、loginctl
四、unit
1、Unit類型
2、systemctl list-units命令可以查看當(dāng)前系統(tǒng)的所有 Unit
3、unit狀態(tài)
4、依賴關(guān)系
五、unit配置文件
1、概述
2、配置文件狀態(tài)
3、配置文件格式
1)unit配置文件格式
2)Unit段的常用選項(xiàng)
3)service常用的選項(xiàng)
4)install 常用選項(xiàng)
六、Target
1、Target命令
2、Target與傳統(tǒng) RunLevel 的對(duì)應(yīng)關(guān)系如下
3、它與init進(jìn)程的主要差別如下
七、日志管理
1、journalctl功能強(qiáng)大,用法非常多
2、查看指定優(yōu)先級(jí)(及其以上級(jí)別)的日志,共有8級(jí)

創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的大石橋網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
一、systemd的由來
Linux一直以來采用init進(jìn)程但是init有兩個(gè)缺點(diǎn):
1、啟動(dòng)時(shí)間長。Init進(jìn)程是串行啟動(dòng),只有前一個(gè)進(jìn)程啟動(dòng)完,才會(huì)啟動(dòng)下一個(gè)進(jìn)程。(這也是centos5的主要特征)
2、啟動(dòng)腳本復(fù)雜。Init進(jìn)程只是執(zhí)行啟動(dòng)腳本,不管其他事情。腳本需要自己處理各種情況,這使得腳本變得很長而且復(fù)雜。
Init:
Centos 5 Sys init 是啟動(dòng)速度最慢的,串行啟動(dòng)過程,無論進(jìn)程相互之間有無依賴關(guān)系。
Centos6 Upstart init 相對(duì)啟動(dòng)速度快一點(diǎn)有所改進(jìn)。有依賴的進(jìn)程之間依次啟動(dòng)而其他與之沒有依賴關(guān)系的則并行同步啟動(dòng)。
Centos7 Systemd 與以上都不同。所有進(jìn)程無論有無依賴關(guān)系則都是并行啟動(dòng)(當(dāng)然很多時(shí)候進(jìn)程沒有真正啟動(dòng)而是只有一個(gè)信號(hào)或者說是標(biāo)記而已,在真正利用的時(shí)候才會(huì)真正啟動(dòng)。)
二、systemd
Systemd為了解決上文的問題而誕生。它的目標(biāo)是,為系統(tǒng)的啟動(dòng)和管理提供一套完整的解決方案。根據(jù)linux慣例,字母d是守護(hù)進(jìn)程(daemon) 的縮寫。Systemd名字的含義就是 守護(hù)整個(gè)系統(tǒng)。
Centos 7里systemd代替了init,成為了系統(tǒng)的第一個(gè)進(jìn)程。PID為1.其他所有的進(jìn)程都是它的子進(jìn)程。Systemd 的優(yōu)點(diǎn)是功能強(qiáng)大,使用方便,缺點(diǎn)是體系龐大,非常復(fù)雜。事實(shí)上,現(xiàn)在還有很多人反對(duì)使用 Systemd,理由就是它過于復(fù)雜,與操作系統(tǒng)的其他部分強(qiáng)耦合,違反"keep simple, keep stupid"的Unix 哲學(xué)。
Systemd 架構(gòu)圖
2、服務(wù)查看:
查看所有服務(wù)的開機(jī)自啟狀態(tài):
chkconfig --list ==> systemctl list-unit-files --type service
用來列出該服務(wù)在哪些運(yùn)行級(jí)別下啟用和禁用
chkconfig sshd –list ==>ls /etc/systemd/system/*.wants/sshd.service
查看服務(wù)是否開機(jī)自啟:
systemctl is-enabled name.service
其它命令:
查看服務(wù)的依賴關(guān)系:
systemctl list-dependencies name.service
殺掉進(jìn)程:
systemctl kill 進(jìn)程名
顯示某個(gè) Unit 的所有底層參數(shù)
# systemctl show httpd.service
顯示某個(gè) Unit 的指定屬性的值
# systemctl show -p CPUShares httpd.service
設(shè)置某個(gè) Unit 的指定屬性
# sudo systemctl set-property httpd.service CPUShares=500
3、服務(wù)狀態(tài):
顯示狀態(tài)
systemctl list-unit-files --type service –all
loaded:Unit 配置文件已處理
active(running)一次或多次持續(xù)處理的運(yùn)行
active(exited)成功完成一次性的配置
active(waiting)運(yùn)行中,等待一個(gè)事件
inactive不運(yùn)行
enabled開機(jī)啟動(dòng)
disabled開機(jī)不啟動(dòng)
static開機(jī)不啟動(dòng),但可被另一個(gè)啟用的服務(wù)激活
4、hostnamectl
hostnamectl命令用于查看當(dāng)前主機(jī)的信息。
顯示當(dāng)前主機(jī)的信息
# hostnamectl
設(shè)置主機(jī)名。
# hostnamectl set-hostname rhel7
5、localectl
localectl命令用于查看本地化設(shè)置。
查看本地化設(shè)置
# localectl
# 設(shè)置本地化參數(shù)。
# localectl set-locale LANG=en_GB.utf8
# localectl set-keymap en_GB
6、 timedatectl
123456789 timedatectl
timedatectl命令用于查看當(dāng)前時(shí)區(qū)設(shè)置。
查看當(dāng)前時(shí)區(qū)設(shè)置
顯示所有可用的時(shí)區(qū)
# timedatectl list-timezones
# 設(shè)置當(dāng)前時(shí)區(qū)
$# timedatectl set-timezone America/New_York
# timedatectl set-time YYYY-MM-DD
# timedatectl set-time HH:MM:SS
7、loginctl
loginctl命令用于查看當(dāng)前登錄的用戶。
# 列出當(dāng)前session
# loginctl list-sessions
# 列出當(dāng)前登錄用戶
# loginctl list-users
# 列出顯示指定用戶的信息
# loginctl show-user (ruanyf) 用戶
四、unit
Systemd可以管理系統(tǒng)中所有資源。不同的資源統(tǒng)稱為unit(單位)。Unit表示不同類型的systemd對(duì)象,通過配置文件進(jìn)程標(biāo)識(shí)和配置;文件中主要包含了系統(tǒng)服務(wù)、監(jiān)聽socket、保存的系統(tǒng)快照以及其它與init相關(guān)的信息。
1、Unit類型
Unit一共分為12種。
Sysstemctl –t help 查看unit類型
Service unit:文件擴(kuò)展名為.Service,用于定義系統(tǒng)服務(wù)
Target unit : 文件名擴(kuò)展為.target,用于模擬實(shí)現(xiàn)“運(yùn)行級(jí)別”
Device unit :.device ,用于定義文件內(nèi)核識(shí)別設(shè)備
Mount unit: .mount 定義文件系統(tǒng)掛載點(diǎn)。
Socket unit: .socket, 用于標(biāo)識(shí)進(jìn)程間通信用的socket文件,也可在系統(tǒng)啟動(dòng)時(shí),延遲啟動(dòng)服務(wù),實(shí)現(xiàn)按需啟動(dòng)
Snapshot unit: .snapshot, 管理系統(tǒng)快照
Swap unit: .swap, 用于標(biāo)識(shí)swap設(shè)備
Automount unit: .automount,文件系統(tǒng)的自動(dòng)掛載點(diǎn)
Path unit: .path,用于定義文件系統(tǒng)中的一個(gè)文件或目錄使用,常用于當(dāng)文件系統(tǒng)變化時(shí),延遲激活服務(wù),如:spool目錄
Scope unit :不是由systemd啟動(dòng)的外部進(jìn)程
Slice unit :進(jìn)程組
Timer unit :定時(shí)器
2、systemctl list-units命令可以查看當(dāng)前系統(tǒng)的所有 Unit 。
列出正在運(yùn)行的 Unit
# systemctl list-units
列出所有Unit,包括沒有找到配置文件的或者啟動(dòng)失敗的
# systemctl list-units --all
列出所有沒有運(yùn)行的 Unit
# systemctl list-units --all --state=inactive
列出所有加載失敗的 Unit
# systemctl list-units --failed
列出所有正在運(yùn)行的、類型為 service 的 Unit
# systemctl list-units --type=service
3、unit狀態(tài)
systemctl status命令用于查看系統(tǒng)狀態(tài)和單個(gè) Unit 的狀態(tài)。
顯示系統(tǒng)狀態(tài)
#systemctl status
顯示單個(gè) Unit 的狀態(tài)
# sysystemctl status bluetooth.service
顯示遠(yuǎn)程主機(jī)的某個(gè) Unit 的狀態(tài)
# systemctl -H root@rhel7.example.com status httpd.service
除了status命令,systemctl還提供了三個(gè)查詢狀態(tài)的簡單方法,主要供腳本內(nèi)部的判斷語句使用。
顯示某個(gè) Unit 是否正在運(yùn)行
# systemctl is-active application.service
顯示某個(gè) Unit 是否處于啟動(dòng)失敗狀態(tài)
# systemctl is-failed application.service
顯示某個(gè) Unit 服務(wù)是否建立了啟動(dòng)鏈接
# systemctl is-enabled application.service
4、依賴關(guān)系
Unit 之間存在依賴關(guān)系:A 依賴于 B,就意味著 Systemd 在啟動(dòng) A 的時(shí)候,同時(shí)會(huì)去啟動(dòng) B。
#systemctl list-dependencies命令列出一個(gè) Unit 的所有依賴。
# systemctl list-dependencies nginx.service
上面命令的輸出結(jié)果之中,有些依賴是 Target 類型(詳見下文),默認(rèn)不會(huì)展開顯示。如果要展開 Target,就需要使用--all參數(shù)。
# systemctl list-dependencies --all nginx.service
五、unit配置文件
1、概述
每一個(gè) Unit 都有一個(gè)配置文件,告訴 Systemd 怎么啟動(dòng)這個(gè) Unit 。
Systemd 默認(rèn)從目錄/etc/systemd/system/讀取配置文件。但是,里面存放的大部分文件都是符號(hào)鏈接,指向目錄/usr/lib/systemd/system/,真正的配置文件存放在那個(gè)目錄。
systemctl enable httpd.service命令用于在上面兩個(gè)目錄之間,建立符號(hào)鏈接關(guān)系。(Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.)等同于 ln -s /usr/lib/systemd/system/httpd.service /etc/systemd/system/multi-user.target.wants/httpd.service。當(dāng)然systemdctl diable httpd.service 則相當(dāng)于刪除這個(gè)軟連接。
/usr/lib/system/system:每個(gè)服務(wù)最主要的啟動(dòng)腳本設(shè)置,類似于之前的/etc/init.d/
/run/system/system:系統(tǒng)執(zhí)行過程中所產(chǎn)生的服務(wù)腳本,與上面目錄優(yōu)先運(yùn)行。
/etc/systemd/system:管理員建立的執(zhí)行腳本,類似于/etc/rc.d/rcN.d/Sxx的功能,比上面目錄優(yōu)先運(yùn)行。
2、配置文件狀態(tài)
systemctl list-unit-files命令用于列出所有配置文件。
列出所有配置文件
#systemctl list-unit-files
列出指定類型的配置文件
#systemctl list-unit-files --type=service
systemctl list-unit-files該命令會(huì)輸出一個(gè)列表,從中可以看到每個(gè)配置文件的狀態(tài)。
Unit config filestatus
lvm2-lvmetad.service disabled
lvm2-lvmetad.socket enabled
lvm2-lvmpolld.service disabled
lvm2-lvmpolld.socket enabled
這個(gè)列表顯示每個(gè)配置文件的狀態(tài),一共有四種。
enabled:已建立啟動(dòng)鏈接
disabled:沒建立啟動(dòng)鏈接
static:該配置文件沒有[Install]部分(無法執(zhí)行),只能作為其他配置文件的依賴
masked:該配置文件被禁止建立啟動(dòng)鏈接
注意,從配置文件的狀態(tài)無法看出,該 Unit 是否正在運(yùn)行。這必須執(zhí)行前面提到的systemctl status命令。
# systemctl status httpd.service
3、配置文件格式
1)unit配置文件格式
[Unit]
Description=backup /etc
Requires=atd.service
[Service]
Type=simple
ExecStart=/bin/bash -c "echo /testdir/bak.sh|at now"
[Install]
WantedBy=multi-user.target
[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)
2、Unit段的常用選項(xiàng):Description:簡短描述
Description:描述信息
After:定義unit的啟動(dòng)次序,表示當(dāng)前unit應(yīng)該晚于哪些
unit啟動(dòng),其功能與Before相反
Requires:依賴到的其它units,強(qiáng)依賴,被依賴的units無法激活時(shí),當(dāng)前unit也無法激活
Wants:依賴到的其它units,弱依賴
Conflicts:定義units間的沖突關(guān)系
BindsTo:與Requires類似,它指定的 Unit 如果退出,會(huì)導(dǎo)致當(dāng)前 Unit 停止運(yùn)行
Before:如果該字段指定的 Unit 也要啟動(dòng),那么必須在當(dāng)前 Unit 之后啟動(dòng)
Conflicts:這里指定的 Unit 不能與當(dāng)前 Unit 同時(shí)運(yùn)行
Condition...:當(dāng)前 Unit 運(yùn)行必須滿足的條件,否則不會(huì)運(yùn)行
Assert...:當(dāng)前 Unit 運(yùn)行必須滿足的條件,否則會(huì)報(bào)啟動(dòng)失敗
3、service常用的選項(xiàng)
Type:定義影響ExecStart及相關(guān)參數(shù)的功能的unit進(jìn)程啟動(dòng)類型
simple:默認(rèn)值,這個(gè)daemon主要由ExecStart接的指令串來啟動(dòng),啟動(dòng)后常駐于內(nèi)存中
forking:由ExecStart啟動(dòng)的程序透過spawns延伸出其他子程序來作為此daemon的主要服務(wù)。原生父程序在啟動(dòng)結(jié)束后就會(huì)終止。
oneshot:與simple類似,不過這個(gè)程序在工作完畢后就結(jié)束了,不會(huì)常駐在內(nèi)存中
dbus:與simple類似,但這個(gè)daemon必須要在取得一個(gè)D-Bus的名稱后,才會(huì)繼續(xù)運(yùn)作.因此通常也要同時(shí)設(shè)定BusNname= 才行
notify:在啟動(dòng)完成后會(huì)發(fā)送一個(gè)通知消息。還需要配合NotifyAccess 來讓 Systemd 接收消息
idle:與simple類似,要執(zhí)行這個(gè)daemon必須要所有的工作都順利執(zhí)行完畢后才會(huì)執(zhí)行。這類的daemon通
常是開機(jī)到最后才執(zhí)行即可的服務(wù)。
EnvironmentFile:環(huán)境配置文件
ExecStart:指明啟動(dòng)unit要運(yùn)行命令或腳本的絕對(duì)路徑
ExecStartPre: ExecStart前運(yùn)行
ExecStartPost: ExecStart后運(yùn)行
ExecRsload: 重啟當(dāng)前服務(wù)時(shí)執(zhí)行的命令
ExecStopPost:停止當(dāng)前服務(wù)之后執(zhí)行的命令
ExecStartSec:自動(dòng)重啟當(dāng)前服務(wù)間隔的秒數(shù)
ExecStop:指明停止unit要運(yùn)行的命令或腳本
Restart:當(dāng)設(shè)定Restart=1 時(shí),則當(dāng)次daemon服務(wù)意外終止后,會(huì)再次自動(dòng)啟動(dòng)此服務(wù)。
TimeoutSec:定義 Systemd 停止當(dāng)前服務(wù)之前等待的秒數(shù)。
Environment:指定環(huán)境變量。
4、install 常用選項(xiàng)
Install段的常用選項(xiàng):
Alias:別名,可使用systemctl command Alias.service
RequiredBy:被哪些units所依賴,強(qiáng)依賴
WantedBy:被哪些units所依賴,弱依賴
Also:安裝本服務(wù)的時(shí)候還要安裝別的相關(guān)服務(wù)
六、Target
啟動(dòng)計(jì)算機(jī)的時(shí)候,需要啟動(dòng)大量的 Unit。如果每一次啟動(dòng),都要一一寫明本次啟動(dòng)需要哪些 Unit,顯然非常不方便。Systemd 的解決方案就是 Target。
簡單說,Target 就是一個(gè) Unit 組,包含許多相關(guān)的 Unit 。啟動(dòng)某個(gè) Target 的時(shí)候,Systemd 就會(huì)啟動(dòng)里面所有的 Unit。從這個(gè)意義上說,Target 這個(gè)概念類似于"狀態(tài)點(diǎn)",啟動(dòng)某個(gè) Target 就好比啟動(dòng)到某種狀態(tài)。
傳統(tǒng)的init啟動(dòng)模式里面,有 RunLevel 的概念,跟 Target 的作用很類似。不同的是,RunLevel 是互斥的,不可能多個(gè) RunLevel 同時(shí)啟動(dòng),但是多個(gè) Target 可以同時(shí)啟動(dòng)。
1、Target命令
查看當(dāng)前系統(tǒng)的所有 Target
# systemctl list-unit-files --type=target
查看一個(gè) Target 包含的所有 Unit
# systemctl list-dependencies multi-user.target
查看啟動(dòng)時(shí)的默認(rèn) Target
# systemctl get-default
設(shè)置啟動(dòng)時(shí)的默認(rèn) Target
# systemctl set-default multi-user.target
切換 Target 時(shí),默認(rèn)不關(guān)閉前一個(gè) Target 啟動(dòng)的進(jìn)程, systemctl isolate 命令改變這種行為,
關(guān)閉前一個(gè) Target 里面所有不屬于后一個(gè) Target 的進(jìn)程 systemctl isolate multi-user.target
2、Target與傳統(tǒng) RunLevel 的對(duì)應(yīng)關(guān)系如下。
Traditional runlevel New target name Symbolically linked to...
Runlevel 0 | runlevel0.target -> poweroff.target
Runlevel 1 | runlevel1.target -> rescue.target
Runlevel 2 | runlevel2.target -> multi-user.target
Runlevel 3 | runlevel3.target -> multi-user.target
Runlevel 4 | runlevel4.target -> multi-user.target
Runlevel 5 | runlevel5.target -> graphical.target
Runlevel 6 | runlevel6.target -> reboot.target
3、它與init進(jìn)程的主要差別如下。
(1)默認(rèn)的 RunLevel(在/etc/inittab文件設(shè)置)現(xiàn)在被默認(rèn)的 Target 取代,位置是/etc/systemd/system/default.target,通常符號(hào)鏈接到graphical.target(圖形界面)或者multi-user.target(多用戶命令行)。
(2)啟動(dòng)腳本的位置,以前是/etc/init.d目錄,符號(hào)鏈接到不同的 RunLevel 目錄 (比如/etc/rc3.d、/etc/rc5.d等),現(xiàn)在則存放在/lib/systemd/system和/etc/systemd/system目錄。
(3)配置文件的位置,以前init進(jìn)程的配置文件是/etc/inittab,各種服務(wù)的配置文件存放在/etc/sysconfig目錄?,F(xiàn)在的配置文件主要存放在/lib/systemd目錄,在/etc/systemd目錄里面的修改可以覆蓋原始設(shè)置。
七、日志管理
Systemd 統(tǒng)一管理所有 Unit 的啟動(dòng)日志。帶來的好處就是,可以只用journalctl一個(gè)命令,查看所有日志(內(nèi)核日志和應(yīng)用日志)。日志的配置文件是/etc/systemd/journald.conf。
1、journalctl功能強(qiáng)大,用法非常多。
查看所有日志(默認(rèn)情況下 ,只保存本次啟動(dòng)的日志)
# journalctl
查看內(nèi)核日志(不顯示應(yīng)用日志)
# journalctl -k
查看系統(tǒng)本次啟動(dòng)的日志
# journalctl -b
# journalctl -b -0
查看上一次啟動(dòng)的日志(需更改設(shè)置)
# journalctl -b -1
查看指定時(shí)間的日志
# journalctl --since="2012-10-30 18:17:16"
# journalctl --since "20 min ago"
# journalctl --since yesterday
# journalctl --since "2015-01-10" --until "2015-01-11 03:00"
# journalctl --since 09:00 --until "1 hour ago"
顯示尾部的最新10行日志
# journalctl -n
顯示尾部指定行數(shù)的日志
# journalctl -n 20
實(shí)時(shí)滾動(dòng)顯示最新日志
# journalctl -f
查看指定服務(wù)的日志
# journalctl /usr/lib/systemd/systemd
查看指定進(jìn)程的日志
# journalctl _PID=1
查看某個(gè)路徑的腳本的日志
# journalctl /usr/bin/bash
查看指定用戶的日志
# journalctl _UID=33 --since today
查看某個(gè) Unit 的日志
# journalctl -u nginx.service
# journalctl -u nginx.service --since today
實(shí)時(shí)滾動(dòng)顯示某個(gè) Unit 的最新日志
# journalctl -u nginx.service -f
合并顯示多個(gè) Unit 的日志
# journalctl -u nginx.service -u php-fpm.service --since today
2、查看指定優(yōu)先級(jí)(及其以上級(jí)別)的日志,共有8級(jí)
0: emerg
1: alert
2: crit
3: err
4: warning
5: notice
6: info
7: debug
# journalctl -p err -b
日志默認(rèn)分頁輸出,--no-pager 改為正常的標(biāo)準(zhǔn)輸出
# journalctl --no-pager
以 JSON 格式(單行)輸出
# journalctl -b -u nginx.service -o json
以 JSON 格式(多行)輸出,可讀性更好
# journalctl -b -u nginx.serviceqq
-o json-pretty
顯示日志占據(jù)的硬盤空間
# journalctl --disk-usage
指定日志文件占據(jù)的最大空間
# journalctl --vacuum-size=1G
指定日志文件保存多久
# journalctl --vacuum-time=1years
分享名稱:CentOS7中Systemd詳解
轉(zhuǎn)載源于:http://www.5511xx.com/article/dpcicih.html


咨詢
建站咨詢
