systemctl命令的使用及服務狀態的檢視
systemctl命令的使用及服務狀態的檢視
參考文件:https://blog.csdn.net/sky__man/article/details/78178821
https://linux.cn/article-5926-1.html
根據參考文件整理
1、systemctl 是系統初始化程式,系統開始的第一個程序,pid為1
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 194636 7792 4064 S 0.0 0.0 3:39.18 systemd
systemctl --version #檢視版本
#檢查systemd和systemctl的二進位制檔案和庫檔案的安裝位置
whereis system
system: /usr/share/man/man3p/system.3p.gz /usr/share/man/man3/system.3.gz
whereis systemctl
systemctl: /usr/bin/systemctl /usr/share/man/man1/systemctl.1.gz
ps -eaf |grep [s]ystemd #檢查systemd是否執行
注意:systemd是作為父程序(PID=1)執行的。在上面帶(-e)引數的ps命令輸出中,選擇所有程序,(-a)選擇除會話前導外的所有程序,並使用(-f)引數輸出完整格式列表(即 -eaf)。
也請注意上例中後隨的方括號和例子中剩餘部分。方括號表示式是grep的字元類表示式的一部分。
#分析systemd啟動程序
systemd-analyze
Startup finished in 10.499s (kernel) + 964ms (initrd) + 13.621s (userspace) = 25.085s
systemd-analyze blame #分析啟動時各個程序花費的時間
systemd-analyze critical-chain #分析啟動時的關鍵鏈
The time after the unit is active or started is printed after the "@" character.
The time the unit takes to start is printed after the "+" character.
graphical.target @13.616s
└─multi-user.target @13.616s
└─libvirtd.service @6.636s +729ms
└─remote-fs.target @6.635s
└─remote-fs-pre.target @6.635s
└─iscsi-shutdown.service @6.614s +19ms
└─network.target @6.607s
└─wpa_supplicant.service @12.465s +26ms
└─basic.target @2.647s
└─sockets.target @2.647s
└─rpcbind.socket @2.647s
└─sysinit.target @2.605s
└─systemd-update-utmp.service @2.598s +6ms
└─auditd.service @2.012s +584ms
└─systemd-tmpfiles-setup.service @1.848s +163ms
└─rhel-import-state.service @1.706s +140ms
└─local-fs.target @1.705s
└─run-user-42.mount @10.101s
└─local-fs-pre.target @1.401s
└─lvm2-monitor.service @498ms +855ms
└─lvm2-lvmetad.service @536ms
└─lvm2-lvmetad.socket @497ms
└─-.slice
重要:Systemctl接受服務(.service),掛載點(.mount),套介面(.socket)和裝置(.device)作為單元。
systemd-analyze critical-chain sshd.service #分析某個服務(sshd)的關鍵鏈
The time after the unit is active or started is printed after the "@" character.
The time the unit takes to start is printed after the "+" character.
sshd.service +223ms
└─network.target @6.607s
└─wpa_supplicant.service @12.465s +26ms
└─basic.target @2.647s
└─sockets.target @2.647s
└─rpcbind.socket @2.647s
└─sysinit.target @2.605s
└─systemd-update-utmp.service @2.598s +6ms
└─auditd.service @2.012s +584ms
└─systemd-tmpfiles-setup.service @1.848s +163ms
└─rhel-import-state.service @1.706s +140ms
└─local-fs.target @1.705s
└─run-user-42.mount @10.101s
└─local-fs-pre.target @1.401s
└─lvm2-monitor.service @498ms +855ms
└─lvm2-lvmetad.service @536ms
└─lvm2-lvmetad.socket @497ms
└─-.slice
2、systemctl 命令:
systemctl list-units ##列出當前系統服務的狀態(列出所有執行中單元)
systemctl list-unit-files ##列出服務的開機狀態(列出所有可用單元)
systemctl --failed ##列出所有失敗單元
systemctl is-enabled crond.service #檢查某個單元(如 cron.service)是否啟用
enabled
systemd-cgls #按等級列出控制組
systemd-cgtop #按CPU、記憶體、輸入和輸出列出控制組
systemctl list-dependencies sshd ##檢視指定服務的倚賴關係
systemctl mask sshd ##凍結指定服務(示例:)
[[email protected] ~]# systemctl mask tnslsnr
Created symlink from /etc/systemd/system/tnslsnr.service to /dev/null.
[[email protected] ~]# systemctl status tnslsnr
● tnslsnr.service
Loaded: masked (/dev/null; bad)
Active: inactive (dead)
systemctl unmask sshd ##啟用服務
systemctl set-default multi-user.target ##開機不開啟圖形
systemctl set-default graphical.target ##開機啟動圖形
setterm ##文字介面設定color
systemctl list-unit-files --type=service ##列出所有服務(包括啟用的和禁用的)
systemctl status sshd ##檢視指定服務的狀態
systemctl stop sshd ##關閉指定服務
systemctl start sshd ##開啟指定服務
systemctl restart sshd ##從新啟動服務
systemctl enable sshd ##設定指定服務開機開啟
systemctl disable sshd ##設定指定服務開機關閉
systemctl reload sshd ##使指定服務從新載入配置
systemctl kill httpd ##使用systemctl命令殺死服務
3、服務狀態:
systemctl status 服務名稱
loaded ##系統服務已經初始化完成,載入過配置
active(running) ##正有一個或多個程式正在系統中執行, vsftpd就是這種模式
atcive(exited) ##僅執行一次就正常結束的服務, 目前並沒有任何程式在系統中執行
atcive(waiting) ##正在執行當中,不過還再等待其他的事件才能繼續處理
inactive ##服務關閉
enbaled ##服務開機啟動
disabled ##服務開機不自啟
static ##服務開機啟動項不可被管理
failed ##系統配置錯誤
4、使用Systemctl控制並管理掛載點
systemctl list-unit-files --type=mount # 列出所有系統掛載點
#掛載、解除安裝、重新掛載、過載系統掛載點並檢查系統中掛載點狀態
# systemctl start tmp.mount
# systemctl stop tmp.mount
# systemctl restart tmp.mount
# systemctl reload tmp.mount
# systemctl status tmp.mount
5、使用Systemctl控制並管理套介面
systemctl list-unit-files --type=socket #列出所有可用系統套介面
#在Linux中啟動、重啟、停止、過載套介面並檢查其狀態
# systemctl start cups.socket
# systemctl restart cups.socket
# systemctl stop cups.socket
# systemctl reload cups.socket
# systemctl status cups.socket
6、服務的CPU利用率(分配額)
systemctl show -p CPUShares sshd.service #獲取當前某個服務的CPU分配額(如sshd)
CPUShares=18446744073709551615
注意:各個服務的預設CPU分配份額=1024,你可以增加/減少某個程序的CPU分配份額。
systemctl set-property sshd.service CPUShares=2000 #將某個服務(sshd.service)的CPU分配份額限制為2000 CPUShares/(有點延時,需要等一下起作用)
systemctl show -p CPUShares sshd.service
CPUShares=2000
#當你為某個服務設定CPUShares,會自動建立一個以服務名命名的目錄,該檔案含有CPUShare限制資訊,你可以通過以下方式檢視該檔案:
cat /etc/systemd/system/sshd.service.d/50-CPUShares.conf
[Service]
CPUShares=2000
systemctl show sshd #檢查某個服務的所有配置細節
7、控制系統執行等級
systemctl rescue #啟動系統救援模式(此時的 runlevel 執行級別是 5 1)
PolicyKit daemon disconnected from the bus.
We are no longer a registered authentication agent.
Broadcast message from [email protected] on pts/0 (Mon 2019-01-07 11:14:41 CST):
The system is going down to rescue mode NOW!
systemctl emergency #進入緊急模式
systemctl get-default #列出當前使用的執行等級
graphical.target
#啟動執行等級5,即圖形模式
# systemctl isolate runlevel5.target
或
# systemctl isolate graphical.target
#啟動執行等級3,即多使用者模式(命令列)
# systemctl isolate runlevel3.target
或
# systemctl isolate multiuser.target
#設定多使用者模式或圖形模式為預設執行等級
# systemctl set-default runlevel3.target
# systemctl set-default runlevel5.target
#重啟、停止、掛起、休眠系統或使系統進入混合睡眠
# systemctl reboot
# systemctl halt
# systemctl suspend
# systemctl hibernate
# systemctl hybrid-sleep
對於不知執行等級為何物的人,說明如下。
Runlevel 0 : 關閉系統
Runlevel 1 : 救援?維護模式
Runlevel 3 : 多使用者,無圖形系統
Runlevel 4 : 多使用者,無圖形系統
Runlevel 5 : 多使用者,圖形化系統
Runlevel 6 : 關閉並重啟機器