你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

如何使用systemctl命令显示在Linux上运行失败的服务/单元

[复制链接]
gaosmile 发布时间:2020-8-3 22:59
本教程介绍如何使用systemctl工具列出启动失败的systemd管理的各个服务。文内含长段代码可复制可往左滑,希望对大家有帮助!

; b5 k) k; f2 v, c' {
列出启动失败的服务
[root@localhost ~]# systemctl list-units --state failed
$ ~; D' [. [$ p* X" B/ _4 b  UNIT          LOAD   ACTIVE SUB    DESCRIPTION
1 }" t9 O. b) s' c& ^5 C6 o● httpd.service loaded failed failed The Apache HTTP Server) _' Y  {" i; I
" d: h4 s8 L; m
LOAD   = Reflects whether the unit definition was properly loaded.
6 |( z; ]9 ]1 w9 U) VACTIVE = The high-level unit activation state, i.e. generalization of SUB.
; d0 K2 T8 C& R& X5 h5 \6 k$ C, mSUB    = The low-level unit activation state, values depend on unit type.
" H" a  A. e& F4 G, g* q# R2 {7 j+ Y' k% I
1 loaded units listed. Pass --all to see loaded but inactive units, too.  |8 T2 H, G" [5 y  D) Q
To show all installed unit files use 'systemctl list-unit-files'.
2 N( ^/ r$ u8 `: V' T$ o; ^

, K! [2 z$ A  n+ }2 m- [2 w
微信图片_20200803225700.png

可以发现,有个一个服务启动失败了。


0 j, r$ ]8 l6 }- ^) O; L* Q, p2 L

is-failed选项

. Z" `; x! p0 G! @4 [, b

可以使用is-failed选项检查指定的服务是否启动失败。如果启动失败,结果是failed。如果启动没有问题,结果是active。


9 E' f7 S6 F4 i$ s, I* ?# z1 [* O
[root@localhost ~]# systemctl is-failed httpd2 P: g& b( i8 ?
failed; j' c7 L7 u+ Q; N6 T
[root@localhost ~]# systemctl is-failed vsftpd6 h& I- l( V/ \
active
" B7 t* y( O9 {: U5 A. V6 h7 V% ^

* O; Z% l# o1 g2 p
检查服务的状态

9 I* g3 @% l0 I1 T7 l7 ?

可以使用status选项,查看服务启动失败的原因,下面状态信息里面告诉我们,是httpd.conf配置文件354行有语法错误。


( I" K+ R1 G* _$ N: ~
May 26 09:22:05 localhost httpd[2958]: httpd: Syntax error on line 354 of /etc/httpd/conf/httpd.conf: /...osed.
- o8 l1 g- U+ k% V! R% w3 w[root@localhost ~]# systemctl status httpd% t: q7 n; C7 k+ Q2 D
● httpd.service - The Apache HTTP Server
  ?/ r; r6 c! [- @   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
8 p# o" U% G( I, a1 K   Active: failed (Result: exit-code) since Tue 2020-05-26 09:22:05 CST; 18min ago9 [& I0 A  `. I/ P( w
     Docs: man:httpd(8)( \0 C2 G/ C2 u7 v, k6 {
           man:apachectl(8)
! u( j  H- \( `) Y5 A1 d+ P Main PID: 2958 (code=exited, status=1/FAILURE): ~& r6 r; H& Z6 c% M" F3 `9 P
6 m* }# m# l  e0 ?
May 26 09:22:05 localhost systemd[1]: Starting The Apache HTTP Server...
. R7 y! Y. L/ [- \$ ^& W2 `May 26 09:22:05 localhost httpd[2958]: httpd: Syntax error on line 354 of /etc/httpd/conf/httpd.conf: /...osed.
% k: i; ~' M3 W: \- iMay 26 09:22:05 localhost systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
: h! ^0 R, G- O" M) I  rMay 26 09:22:05 localhost kill[2959]: kill: cannot find process ""
+ f6 Z, k' o! u* oMay 26 09:22:05 localhost systemd[1]: httpd.service: control process exited, code=exited status=1
0 z1 P$ P  C, f% [  @  N8 J7 PMay 26 09:22:05 localhost systemd[1]: Failed to start The Apache HTTP Server.9 o& q4 t: O4 y5 X/ ]; T( e
May 26 09:22:05 localhost systemd[1]: Unit httpd.service entered failed state.  y) Z* b8 g1 U; ~# V9 O
May 26 09:22:05 localhost systemd[1]: httpd.service failed.) [  A" ]& m( @8 n7 p( X) V2 t
Hint: Some lines were ellipsized, use -l to show in full.
( ^; E8 p% O; i2 Z0 Z

7 L: H* ?+ C. Q

微信图片_20200803225712.png

) z+ L/ A: z; F7 v$ W- J

使用journalctl查看服务的启动日志

如果使用systemctl status [unit]没有找到服务启动失败的原因,可以使用journalctl查看更多的启动日志。

下面操作是过滤出所有带有error的行,可以找到启动失败的服务。

6 w. G2 j* y2 x( ~% d5 F# ]% }
[root@localhost ~]# journalctl |grep 'error'
, @/ `1 ^" q& {& oMay 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.

/ p# v+ V6 S! L6 R8 ~6 O+ k

% g5 L' g8 V( e4 ]$ r; I
微信图片_20200803225903.png
! u2 q0 `' k- C/ @4 F+ y
也可以使用journalctl -u [unit]只查看某一个服务的启动日志:[root@localhost ~]# journalctl -u httpd.service. h9 A: L  d6 B! D
-- Logs begin at Sun 2020-05-24 06:52:52 CST, end at Tue 2020-05-26 09:48:03 CST. --
& m1 V. ]# e/ k2 a" cMay 26 09:22:05 localhost systemd[1]: Starting The Apache HTTP Server...
& o1 T+ x% w% X; cMay 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.
) O1 N+ O, j. H+ w, W6 N) Q6 _May 26 09:22:05 localhost systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE% M: }3 x$ L$ p3 N0 c: F! y
May 26 09:22:05 localhost kill[2959]: kill: cannot find process "". L: l5 i* o* ]8 `, S
May 26 09:22:05 localhost systemd[1]: httpd.service: control process exited, code=exited status=1
) Q7 }4 D+ T# \1 A: d( a3 aMay 26 09:22:05 localhost systemd[1]: Failed to start The Apache HTTP Server.' Q) u. Q2 e, h+ j, \! w
May 26 09:22:05 localhost systemd[1]: Unit httpd.service entered failed state.
1 o0 M) Z' K8 s1 lMay 26 09:22:05 localhost systemd[1]: httpd.service failed.
  r3 l8 ~9 \  P( l- ~/ A8 W% B/ n
' d- ^; o, ~* c! b: K' u% @8 P4 C#过滤出有错误的信息。
) g6 D8 g" ^5 M& H[root@localhost ~]# journalctl -u httpd.service |grep 'error'
% p3 v- t" _% p" L# X! h8 Y5 XMay 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.

" x$ L4 I& m" a6 c' o0 j+ {

0 `" }2 p: `9 ]  F
微信图片_20200803225919.jpg

发现 /etc/httpd/conf/httpd.conf配置文件的354行,Directory标签没有关闭,返现原因了,就马上修改吧。


3 Q$ |' J( K3 G7 Y

总    结
8 n* p. J# S. b0 a

我们学习了如何使用systemctl命令显示在Linux上运行失败的服务/单元。有关详细信息,请查看systemctl手册。

8 l! N# q" F6 Y' B: P
收藏 评论0 发布时间:2020-8-3 22:59

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版