如何使用systemctl在Linux上查看服务状态

时间:2020-01-09 10:43:49  来源:igfitidea点击:

如何在Linux操作系统上使用systemctl命令查看systemd服务的状态?
我们在" systemd"下使用" systemctl status"命令来查看给定服务在Linux操作系统上的状态。

查看服务状态

systemctl命令的语法如下

systemctl status {service-name}
systemctl status {unit-name}

如何查看名为nginx的服务的状态

类型:

$ systemctl status nginx.service
## ssh server status ##
$ systemctl status sshd.service
## Lighttpd web server status ##
$ systemctl status lighttpd.service

点(.)使用支持的终端上的颜色一目了然地汇总设备状态。
白色表示无效或者停用状态。
红色表示失败或者错误状态。
绿色表示活动,重新加载或者激活状态。

了解系统服务/单元状态

Linux服务的状态取决于各种状态,例如:

服务状态说明
active(running正在运行)服务或者守护程序正在后台运行。例如,sshd或者nginx/apache Web服务器并列出传入流量。
active(exited已退出)服务已从配置文件成功启动。通常,在退出服务之前读取一次服务配置。例如,AppArmor或者防火墙服务。
active(waiting正在等待)我们的服务正在运行,但正在等待诸如CPUS /打印事件之类的事件。
非活动服务未运行。
enabled在引导时启用了服务。
disabled服务已失效,将不会在Linux服务器启动时启动。
staticService无法在Linux上启用,但大多数情况下是由另一个systemd单元自动启动的。换句话说,在[Install]单位文件部分中,未启用单位文件,并且未提供允许的条款。
masked服务被完全禁用,对其上的任何启动操作总是失败。
alias服务名是别名。这意味着服务是符号链接到另一个单元文件。
链接可通过一个或者多个符号链接获得到单位文件(永久在/etc/systemd/system /中或者暂时在/run/systemd/system /中),即使单位文件可能位于单位文件搜索路径之外。

当前,以下单元受systemd支持

  • service:关于由systemd控制和监督的过程的服务单元配置。
  • mount:由systemd控制和监视的文件系统挂载点。
  • swap:交换文件/磁盘配置,由systemd控制。
  • socket套接字:由systemd控制和监控的IPC或者网络套接字或者文件系统FIFO,用于基于套接字的激活。
  • target:它包含有关systemd目标单元的信息。它用于在启动过程中对单元和众所周知的同步点进行分组。例如,graphical.target用于基于GUI的桌面登录。同样,服务器可以使用multi-user.target,用户可以其中使用ssh/console登录。
  • device:在sysfs/udev设备树中公开的设备单元。它包括网络和其他设备。
  • automount:自动挂载文件系统
  • timer:类似于cron的systemd单元,以给定的日期/时间格式运行命令和服务。例如,刷新固件或者由Python或者PHP Webapp创建的干净会话。
  • path:设置所有路径单位的系统特殊目标单位。例如,systemd可以采取依赖文件系统路径的操作。如果/etc/foo /已修改,请采取一些措施。
  • 切片:我们使用系统切片来隔离工作负载。它们定义了放置范围和服务的层次结构。实际过程包含在范围或者服务中。认为它是轻量级的Docker。对于每个片,可以设置适用于所有进程的某些资源限制,例如CPU或者磁盘I/O限制。
  • scope:作用域单位不是通过单位配置文件配置的,而是仅使用systemd的总线接口以编程方式创建的。它们的命名类似于文件名。名称以.scope结尾的单位是指范围单位。合并范围部门管理一组系统过程。与服务单元不同,作用域单元管理外部创建的流程,并且不自行分叉流程。作用域单元的主要目的是将系统服务的工作进程分组以进行组织和资源管理。

我们可以列出所有服务单元,如下所示:

$ sudo systemctl --type=service

想查看安装类型的单位吗?
尝试:

$ sudo systemctl --type=mount

在Linux框中显示所有系统计时器部件:

$ sudo systemctl -t timer
UNIT                         LOAD   ACTIVE SUB     DESCRIPTION     
____________________________________________________________________________________________________________                                       
  anacron.timer                loaded active waiting Trigger anacron every hour                             
  apt-daily-upgrade.timer      loaded active waiting Daily apt upgrade and clean activities                 
  apt-daily.timer              loaded active waiting Daily apt download activities                          
  e2scrub_all.timer            loaded active waiting Periodic ext4 Online Metadata Check for All Filesystems
  fstrim.timer                 loaded active waiting Discard unused blocks once a week                      
  fwupd-refresh.timer          loaded active waiting Refresh fwupd metadata regularly                       
  logrotate.timer              loaded active waiting Daily rotation of log files                            
  man-db.timer                 loaded active waiting Daily man-db regeneration                              
  mdcheck_start.timer          loaded active waiting MD array scrubbing                                     
  mdmonitor-oneshot.timer      loaded active waiting Reminder for degraded MD arrays                        
  motd-news.timer              loaded active waiting Message of the Day                                     
  phpsessionclean.timer        loaded active waiting Clean PHP session files every 30 mins                  
  systemd-tmpfiles-clean.timer loaded active waiting Daily Cleanup of Temporary Directories                 

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.

13 loaded units listed. Pass --all to see loaded but inactive units, too.

要显示所有已安装的单位文件,请使用:

$ sudo systemctl list-unit-files

Linux查看服务状态

执行以下命令,以查看自启动以来Linux系统上的所有服务和单元状态:

$ sudo systemctl

点击放大

使用grep命令/egrep命令过滤掉所需的单位/服务:

$ sudo systemctl | grep ssh
$ sudo systemctl | egrep 'apache|nginx|lighttpd|php'

如何列出systemd当前在内存中的单位

执行以下命令:

$ sudo systemctl list-units
$ sudo systemctl list-units | more
$ sudo systemctl list-units | grep sshd
## filter by unit types ##
$ sudo systemctl list-units --type service
$ sudo systemctl list-units --type timer

列出systemd/systemctl Linux上所有失败的单元/服务

$ sudo systemctl list-units --failed
$ sudo systemctl list-units --state failed
## filtering by unit type ##
$ sudo systemctl list-units --state failed --type service
$ sudo systemctl list-units --state failed --type timer

systemctl命令选项以列出所有失败的单元/服务

如果nginx等服务未运行该怎么办?

打开系统服务:

$ sudo systemctl enable nginx.service

启动nginx服务:

$ sudo systemctl start nginx.service

我们可以如下停止或者重新启动该服务:

$ sudo systemctl stop nginx.service
$ sudo systemctl restart nginx.service

验证是否启用了服务,请运行:

$ sudo is-enabled nginx.service

再次查看状态:

$ sudo status nginx.service

要查看调试服务问题的完整输出,请通过--full或者-l选项:

$ sudo status nginx.service -l
$ sudo status openvpn.service --full

我们可以使用journalctl命令调试并查看与服务相关的所有日志消息:

$ sudo journalctl UNIT=nginx.service
Aug 02 03:51:05 utls-wp-mg-www-cbz systemd[1]: Stopped A high performance web server and a reverse proxy server.
Aug 02 03:51:15 utls-wp-mg-www-cbz systemd[1]: Starting A high performance web server and a reverse proxy server...
Aug 02 03:51:15 utls-wp-mg-www-cbz systemd[1]: nginx.service: Control process exited, code=exited, status=1/FAILURE
Aug 02 03:51:15 utls-wp-mg-www-cbz systemd[1]: nginx.service: Failed with result 'exit-code'.
Aug 02 03:51:15 utls-wp-mg-www-cbz systemd[1]: Failed to start A high performance web server and a reverse proxy server.
Aug 02 03:51:48 utls-wp-mg-www-cbz systemd[1]: Starting A high performance web server and a reverse proxy server...
Aug 02 03:51:48 utls-wp-mg-www-cbz systemd[1]: nginx.service: Control process exited, code=exited, status=1/FAILURE
Aug 02 03:51:48 utls-wp-mg-www-cbz systemd[1]: nginx.service: Failed with result 'exit-code'.
Aug 02 03:51:48 utls-wp-mg-www-cbz systemd[1]: Failed to start A high performance web server and a reverse proxy server.
Aug 02 03:52:07 utls-wp-mg-www-cbz systemd[1]: Starting A high performance web server and a reverse proxy server...
Aug 02 03:52:07 utls-wp-mg-www-cbz systemd[1]: nginx.service: Control process exited, code=exited, status=1/FAILURE
Aug 02 03:52:07 utls-wp-mg-www-cbz systemd[1]: nginx.service: Failed with result 'exit-code'.
Aug 02 03:52:07 utls-wp-mg-www-cbz systemd[1]: Failed to start A high performance web server and a reverse proxy server.
Aug 02 03:53:05 utls-wp-mg-www-cbz systemd[1]: Starting A high performance web server and a reverse proxy server...
Aug 02 03:53:05 utls-wp-mg-www-cbz systemd[1]: Started A high performance web server and a reverse proxy server.
Aug 04 04:11:47 utls-wp-mg-www-cbz systemd[1]: Stopping A high performance web server and a reverse proxy server...
Aug 04 04:11:48 utls-wp-mg-www-cbz systemd[1]: nginx.service: Succeeded.
Aug 04 04:11:48 utls-wp-mg-www-cbz systemd[1]: Stopped A high performance web server and a reverse proxy server.
-- Reboot -
Aug 04 04:27:35 utls-wp-mg-www-cbz systemd[1]: Starting A high performance web server and a reverse proxy server...
Aug 04 04:27:35 utls-wp-mg-www-cbz systemd[1]: Started A high performance web server and a reverse proxy server.

如何查看系统服务/单位文件源

如下所示传递cat选项(类似于cat命令):

$ sudo systemctl cat {service-name}
$ sudo systemctl cat nginx.service
/lib/systemd/system/nginx.service
# Stop dance for nginx
# =======================
#
# ExecStop sends SIGSTOP (graceful stop) to the nginx process.
# If, after 5s (--retry QUIT/5) nginx is still running, systemd takes control
# and sends SIGTERM (fast shutdown) to the main process.
# After another 5s (TimeoutStopSec=5), and if nginx is alive, systemd sends
# SIGKILL to all the remaining processes in the process group (KillMode=mixed).
#
# nginx signals reference doc:
# http://nginx.org/en/docs/control.html
#
[Unit]
Description=A high performance web server and a reverse proxy server
Documentation=man:nginx(8)
After=network.target
 
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid
TimeoutStopSec=5
KillMode=mixed
 
[Install]
WantedBy=multi-user.target