CentOS7中使用systemctl列出啟動失敗的服務

夢共裡醉發表於2021-05-18
本教程介紹如何使用systemctl工具列出啟動失敗的systemd管理的各個服務
列出啟動失敗的服務
[root@localhost ~]# systemctl list-units --state failed
  UNIT          LOAD   ACTIVE SUB    DESCRIPTION
● httpd.service loaded failed failed The Apache HTTP Server
LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.
1 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

CentOS7中使用systemctl列出啟動失敗的服務CentOS7中使用systemctl列出啟動失敗的服務
可以發現,有個一個服務啟動失敗了。

is-failed選項

可以使用 is-failed選項檢查指定的服務是否啟動失敗。如果啟動失敗,結果是 failed。如果啟動沒有問題,結果是 active

[root@localhost ~]# systemctl is-failed httpd
failed
[root@localhost ~]# systemctl is-failed vsftpd
active

CentOS7中使用systemctl列出啟動失敗的服務CentOS7中使用systemctl列出啟動失敗的服務

檢查服務的狀態

可以使用 status選項,檢視服務啟動失敗的原因,下面狀態資訊裡面告訴我們,是 httpd.conf配置檔案354行有語法錯誤。

May 26 09:22:05 localhost httpd[2958]: httpd: Syntax error on line 354 of /etc/httpd/conf/httpd.conf: /...osed.
[root@localhost ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Tue 2020-05-26 09:22:05 CST; 18min ago
     Docs: man:httpd(8)
           man:apachectl(8)
 Main PID: 2958 (code=exited, status=1/FAILURE)
May 26 09:22:05 localhost systemd[1]: Starting The Apache HTTP Server...
May 26 09:22:05 localhost httpd[2958]: httpd: Syntax error on line 354 of /etc/httpd/conf/httpd.conf: /...osed.
May 26 09:22:05 localhost systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
May 26 09:22:05 localhost kill[2959]: kill: cannot find process ""
May 26 09:22:05 localhost systemd[1]: httpd.service: control process exited, code=exited status=1
May 26 09:22:05 localhost systemd[1]: Failed to start The Apache HTTP Server.
May 26 09:22:05 localhost systemd[1]: Unit httpd.service entered failed state.
May 26 09:22:05 localhost systemd[1]: httpd.service failed.
Hint: Some lines were ellipsized, use -l to show in full.

CentOS7中使用systemctl列出啟動失敗的服務CentOS7中使用systemctl列出啟動失敗的服務

使用journalctl檢視服務的啟動日誌

如果使用 systemctl status [unit]沒有找到服務啟動失敗的原因,可以使用journalctl檢視更多的啟動日誌。

下面操作是過濾出所有帶有 error的行,可以找到啟動失敗的服務。

[root@localhost ~]# journalctl |grep 'error'
May 26 09:22:05 localhost httpd[2958]: httpd: Syntax error on line 354 of /etc/httpd/conf/httpd.conf: /etc/httpd/conf/httpd.conf:354:was not closed.

CentOS7中使用systemctl列出啟動失敗的服務CentOS7中使用systemctl列出啟動失敗的服務
也可以使用 journalctl -u [unit]只檢視某一個服務的啟動日誌:

[root@localhost ~]# journalctl -u httpd.service 
-- Logs begin at Sun 2020-05-24 06:52:52 CST, end at Tue 2020-05-26 09:48:03 CST. --
May 26 09:22:05 localhost systemd[1]: Starting The Apache HTTP Server...
May 26 09:22:05 localhost httpd[2958]: httpd: Syntax error on line 354 of /etc/httpd/conf/httpd.conf: /etc/httpd/conf/httpd.conf:354:was not closed.
May 26 09:22:05 localhost systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
May 26 09:22:05 localhost kill[2959]: kill: cannot find process ""
May 26 09:22:05 localhost systemd[1]: httpd.service: control process exited, code=exited status=1
May 26 09:22:05 localhost systemd[1]: Failed to start The Apache HTTP Server.
May 26 09:22:05 localhost systemd[1]: Unit httpd.service entered failed state.
May 26 09:22:05 localhost systemd[1]: httpd.service failed.
#過濾出有錯誤的資訊。
[root@localhost ~]# journalctl -u httpd.service |grep 'error'
May 26 09:22:05 localhost httpd[2958]: httpd: Syntax error on line 354 of /etc/httpd/conf/httpd.conf: /etc/httpd/conf/httpd.conf:354:was not closed.

CentOS7中使用systemctl列出啟動失敗的服務CentOS7中使用systemctl列出啟動失敗的服務
發現  /etc/httpd/conf/httpd.conf配置檔案的354行, Directory標籤沒有關閉,返現原因了,就馬上修改吧。

總結

我們學習瞭如何使用systemctl 顯示在 上執行失敗的服務/單元。有關詳細資訊,請檢視systemctl手冊。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31524109/viewspace-2772685/,如需轉載,請註明出處,否則將追究法律責任。

相關文章