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

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

[复制链接]
gaosmile 发布时间:2020-8-3 22:59
本教程介绍如何使用systemctl工具列出启动失败的systemd管理的各个服务。文内含长段代码可复制可往左滑,希望对大家有帮助!
# s' H! c- \) G* x: Q* @+ D9 Q
列出启动失败的服务
[root@localhost ~]# systemctl list-units --state failed! d7 z- |6 E$ _; z" i$ O! L
  UNIT          LOAD   ACTIVE SUB    DESCRIPTION
+ k7 [  K. }5 \  s8 s& T  n6 d  b● httpd.service loaded failed failed The Apache HTTP Server
/ F" w0 U3 r' ?# K+ S, D7 ]/ h" K& h- |
LOAD   = Reflects whether the unit definition was properly loaded.1 K/ |, C* K+ A: ~6 P
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
0 Q0 v- r5 C) Q& g+ t) v: d8 j" \SUB    = The low-level unit activation state, values depend on unit type.
2 `2 M6 K! {$ M  u
8 }1 O" P$ x( e2 v/ M8 X1 loaded units listed. Pass --all to see loaded but inactive units, too.
+ z+ {$ S( O9 N! @To show all installed unit files use 'systemctl list-unit-files'.

3 D0 |: B0 D% W; V( _: `

  x! ]$ |1 p( t& @" h
微信图片_20200803225700.png

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


4 p2 u' R; w/ V# S5 {2 B

is-failed选项

/ A  ~' i) `7 h$ a9 P5 w- ?/ h

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


: H, @  x. K8 c- a/ ?1 t
[root@localhost ~]# systemctl is-failed httpd
+ P1 m; B- `8 @; R, ]+ Wfailed6 W* K* _5 U# Y! m. T
[root@localhost ~]# systemctl is-failed vsftpd# F2 I) P6 m) A* a- R
active

0 ^( m; `2 g8 K8 r; S. G& I0 t7 M( ?" j7 I: e% C
检查服务的状态
' h! ?4 a7 J% V4 d% C) n& o# t

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


- M% Q+ ]- t1 Y, N9 M
May 26 09:22:05 localhost httpd[2958]: httpd: Syntax error on line 354 of /etc/httpd/conf/httpd.conf: /...osed.2 F& P9 z: y8 P$ N# z+ z* F
[root@localhost ~]# systemctl status httpd
: Z7 e6 I; p' _: z. B& T● httpd.service - The Apache HTTP Server8 t+ u& f% s" S- M' `4 H$ B
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)' ^% l8 |/ R6 q3 G+ i
   Active: failed (Result: exit-code) since Tue 2020-05-26 09:22:05 CST; 18min ago
" W4 J. S0 J0 N/ i6 p     Docs: man:httpd(8)6 Z6 l2 i0 t" c  j& P
           man:apachectl(8)
0 v- g( u* _( p0 h9 _% s' e* K Main PID: 2958 (code=exited, status=1/FAILURE)
& b/ v4 L1 R2 I; Q$ e0 E0 C+ w" q) m. M4 t
May 26 09:22:05 localhost systemd[1]: Starting The Apache HTTP Server...6 h4 m& N* A& E$ U( ?8 m
May 26 09:22:05 localhost httpd[2958]: httpd: Syntax error on line 354 of /etc/httpd/conf/httpd.conf: /...osed.
% p5 b  n9 T. y" gMay 26 09:22:05 localhost systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
) u+ o/ x7 J3 Z" K+ BMay 26 09:22:05 localhost kill[2959]: kill: cannot find process ""
1 l. d) @5 `, L" Z& {& LMay 26 09:22:05 localhost systemd[1]: httpd.service: control process exited, code=exited status=1  i  N! e8 N9 J  B
May 26 09:22:05 localhost systemd[1]: Failed to start The Apache HTTP Server.
- g+ v4 A, k2 z9 MMay 26 09:22:05 localhost systemd[1]: Unit httpd.service entered failed state.
8 H9 @+ D( n! X1 sMay 26 09:22:05 localhost systemd[1]: httpd.service failed.: ?8 Y/ f6 M5 Z  a
Hint: Some lines were ellipsized, use -l to show in full.

; x  g* @: l5 ?- K* V

9 ?9 M1 r: h! T% `, F1 N

微信图片_20200803225712.png

% w* Y* }& O' X% h& Q" k

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

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

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


9 j* N9 z5 e1 Z$ Z
[root@localhost ~]# journalctl |grep 'error'7 l4 R' [) A) j. R% p% ^
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.
  N: e3 K" {5 ^
: v9 ~, z& t: S3 T5 U. [! @
微信图片_20200803225903.png
0 o, q4 d) _+ n  J$ c1 M
也可以使用journalctl -u [unit]只查看某一个服务的启动日志:[root@localhost ~]# journalctl -u httpd.service
0 Z: {/ t" p1 H-- Logs begin at Sun 2020-05-24 06:52:52 CST, end at Tue 2020-05-26 09:48:03 CST. --
: w# b3 H% E0 _* @May 26 09:22:05 localhost systemd[1]: Starting The Apache HTTP Server..., C- P+ D* |8 z0 i! ]9 Q% g) L
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.* [" N1 }' a3 S0 Q1 L
May 26 09:22:05 localhost systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE, z1 Y1 f7 ~5 q& {" C. O
May 26 09:22:05 localhost kill[2959]: kill: cannot find process "") N; T* F/ @3 c) V( g
May 26 09:22:05 localhost systemd[1]: httpd.service: control process exited, code=exited status=12 }, p# `* x$ S1 n3 C
May 26 09:22:05 localhost systemd[1]: Failed to start The Apache HTTP Server.8 y7 @+ t, m- H+ v6 ^) l- Z4 H" _
May 26 09:22:05 localhost systemd[1]: Unit httpd.service entered failed state.( d3 C  |9 @3 b# O' N# M
May 26 09:22:05 localhost systemd[1]: httpd.service failed.
/ x5 o, [* u( Z9 ~# a- n' m4 ]: J; d+ I1 k
#过滤出有错误的信息。
: O! J; j( t& N3 {4 s* V' O8 H[root@localhost ~]# journalctl -u httpd.service |grep 'error'
2 C2 W( {/ H8 K9 U* l/ z1 pMay 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.

) }5 T; K- Z! V
4 [; P* W8 b# B2 }/ K7 ^
微信图片_20200803225919.jpg

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

' U% V( J$ s+ ~4 x; X) |& r+ o

总    结

- Q3 ~7 r/ L" w& e+ Y

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


, P& B( M+ ^( a; W, ~' k/ C
收藏 评论0 发布时间:2020-8-3 22:59

举报

0个回答

所属标签

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