
本教程介绍如何使用systemctl工具列出启动失败的systemd管理的各个服务。文内含长段代码可复制可往左滑,希望对大家有帮助! 列出启动失败的服务 [root@localhost ~]# systemctl list-units --state failedUNIT LOAD ACTIVE SUB DESCRIPTION ● 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. ACTIVE = The high-level unit activation state, i.e. generalization of SUB. SUB = The low-level unit activation state, values depend on unit type. * 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; ^ ![]() 可以发现,有个一个服务启动失败了。
is-failed选项 可以使用is-failed选项检查指定的服务是否启动失败。如果启动失败,结果是failed。如果启动没有问题,结果是active。 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% ^ 检查服务的状态 可以使用status选项,查看服务启动失败的原因,下面状态信息里面告诉我们,是httpd.conf配置文件354行有语法错误。 [root@localhost ~]# systemctl status httpd% t: q7 n; C7 k+ Q2 D ● 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 ago9 [& I0 A `. I/ P( w Docs: man:httpd(8)( \0 C2 G/ C2 u7 v, k6 { man:apachectl(8) 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... 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.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
) 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'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. ![]() ! 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. -- 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% 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 May 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. 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. ![]() 发现 /etc/httpd/conf/httpd.conf配置文件的354行,Directory标签没有关闭,返现原因了,就马上修改吧。
总 结 8 n* p. J# S. b0 a 我们学习了如何使用systemctl命令显示在Linux上运行失败的服务/单元。有关详细信息,请查看systemctl手册。 8 l! N# q" F6 Y' B: P |