myfreax

使用Systemctl列出Linux服务和状态

在Linux中,服务是在后台中运行的程序。 服务可以按需启动,也可以在启动时启动。最近的大多数Linux发行版都使用systemd作为默认的初始化系统和服务管理器。本文介绍了如何在Linux中列出服务

4 min read
By myfreax
使用Systemctl列出Linux服务和状态

在Linux中,服务是在后台中运行的程序。 服务可以按需启动,也可以在启动时启动。

如果您使用Linux作为主要操作系统或开发平台,则您将处理不同的服务,例如webserver,ssh或 cron 。 在调试系统问题时,知道如何列出正在运行的服务或检查服务状态非常重要。

最近的大多数Linux发行版都使用systemd作为默认的初始化系统和服务管理器。

Systemd是一套用于管理Linux系统的工具。 它用于启动计算机,管理服务,自动挂载文件系统,日志事件,设置主机名和其他系统任务。

本文介绍了如何在Linux中列出服务。

列出Linux服务

Systemd使用units单元的概念,可以是services服务,sockets套接字,挂载点mount,devices设备等。使用ini格式的文本文件定义单元。 这些文件包括有关设备,其设置和要执行的命令的信息。 文件扩展名定义单位文件类型。 例如,系统服务units单元文件的扩展名为.service

systemctl是一个命令行程序,用于控制systemd和管理服务。 它是系统生态系统的一部分,默认情况下在所有系统上都可用。

要获取所有已加载服务单元的列表,请输入:

sudo systemctl list-units --type service
UNIT          LOAD      ACTIVE SUB     DESCRIPTION                                                              
cron.service  loaded    active running Regular background program processing daemon 
...

每行输出从左到右包含以下几列:

  • UNIT-服务unit单元的名称。
  • LOAD -有关unit单元文件是否已加载到内存中的信息。
  • ACTIVE -高级unit单元文件激活状态,可以是active活动,reloading重新加载,inactive非活动,failed失败,activating激活,deactivating停用。
  • SUB -低级unit单元文件激活状态。 该字段的值取决于unit类型。 例如,类型服务unit可以处于以下状态之一:dead死亡,exited退出,failed失败,inactive不活动或running正在运行。
  • DESCRIPTION -单位文件的简短说明。

默认情况下,该命令仅列出已加载的活动unit。 要同时查看已加载但无效的unit,请传递--all选项:

sudo systemctl list-units --type service --all

如果要查看所有已安装的unit文件,而不仅仅是加载的文件,请使用:

sudo systemctl list-unit-files

显示服务状态

要检查服务的状态,请使用systemctl status命令:

sudo systemctl status <service_name>.service

其中<service_name>是您要检查的服务unit单元的名称。 例如,要确定nginx服务的当前状态,您可以运行:

sudo systemctl status nginx.service

您可以省略后缀“ .service”。 systemctl status nginxsystemctl status nginx.service相同。

● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2020-12-23 19:13:50 UTC; 5s ago
       Docs: man:nginx(8)
    Process: 3061052 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 3061063 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 3061064 (nginx)
      Tasks: 2 (limit: 470)
     Memory: 6.0M
     CGroup: /system.slice/nginx.service
             ├─3061064 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             └─3061065 nginx: worker process

Dec 23 19:13:50 myfreax.dev systemd[1]: Starting A high performance web server and a reverse proxy server...

该命令将打印以下信息:

  • Loaded-服务单元是否已加载以及单元文件的完整路径。 它还显示是否在启动时启用了设备。
  • Active -服务是否处于活动状态并正在运行。 如果您的终端支持颜色,并且该服务已启用并且正在运行,则点()和“活动(正在运行)”部分将以绿色打印。 该行还显示了服务运行了多长时间。
  • Docs -服务文档。
  • Process -服务进程有关的信息。
  • Main PID -服务PID。
  • Tasks -单位的任务数和任务限制。
  • Memory -已用内存有关的信息。
  • CGroup -控制组的有关信息。

如果只想检查服务状态,请使用systemctl is-active命令。 例如,要验证nginx服务正在运行,可以运行:

systemctl is-active nginx.service
active

该命令将向您显示服务状态。 如果服务处于活动状态,则命令返回的退出状态为0,这在外壳程序脚本中使用该命令时很有用。

结论

我们已向您展示了如何使用systemctl命令列出Linux服务并检查其状态。

如果您有任何问题或反馈,请随时在下面评论。