1. 程式人生 > >systemctl命令的使用及服務狀態的檢視

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 : 關閉並重啟機器