列出systemctl服务及状态

时间:2020-02-23 14:40:33  来源:igfitidea点击:

在本教程中,我将共享可用于列出systemctl服务及其状态的命令。
我们可以在脚本中使用这些方法来添加服务状态检查,以确保服务处于运行或者失败状态。

我们是systemd和systemctl的新手吗?

使用RHEL/CentOS 7,现在我们有了基于systemd的服务,并且不推荐使用SysV脚本。
如果我们不熟悉systemd,那么我建议我们阅读另一篇文章,我在SysV和systemd服务之间进行了1:1比较。

现在,使用systemd不再支持传统的Linux命令,如Chckconfig,service等。

尽管我们仍然可以使用这些命令,但是可以在以后的版本中将其删除。

例如,在RHEL/CentOS 6中,我们曾经使用chkconfig在不同的运行级别启用或者禁用服务。
现在,在RHEL 8中,我也看到我们可以使用chkconfig

# chkconfig postfix on
Note: Forwarding request to 'systemctl enable postfix.service'.
Created symlink /etc/systemd/system/multi-user.target.wants/postfix.service → /usr/lib/systemd/system/postfix.service.

但是请求在内部被路由到systemctl
同样,我们可以使用传统命令(即service <service_name> <action>)重新启动服务。
例如,重启sshd

# service sshd restart
Redirecting to /bin/systemctl restart sshd.service

这个请求也被转移到systemctl

因此,我希望我们在使用RHEL 8.1撰写本文时了解这一点。

# cat /etc/redhat-release
Red Hat Enterprise Linux release 8.1 (Ootpa)

我们仍然可以使用传统的SysV命令,但是现在可以在任何发行版中将其删除。
因此,我强烈建议用户开始使用" systemctl"命令,因为它们是用户友好且功能强大的工具,并且具有大量支持的选项。

说明:

使用systemd,我们将单元文件进一步分类为servicesockettarget等。
因此,如果我们只想列出服务,套接字或者任何其他类型的列表,则必须非常清楚自己的要求。
单元。

加载到内存中的systemctl列表单元文件

列出活动单位文件

首先,我们将列出Linux服务器内存中当前可用的所有单位文件。
此命令将仅列出服务器内存中的活动单元:

# systemctl list-units

systemctl列表单位

列出所有单位文件

要列出所有独立于其状态的单元,请在此命令中添加--all

# systemctl list-units --all

systemctl list-units --all

如我们所见,它正在加载所有单元文件,包括" failed"," inactive"单元文件

systemctl列出已安装的单元文件

现在," list-units"显示了当前已加载到内存中但不一定安装在服务器上的设备列表。
要查看服务器上当前安装的单位文件列表,我们使用:

# systemctl list-unit-files

systemctl列表单元文件

提示:

其中此命令将显示所有已安装的单位文件,而与它们的状态无关,这与列表单位不同,列表单位仅显示活动单位文件。
用此命令添加--all将没有任何好处。

列出单位文件的类型

单元文件可以有不同类型,例如服务,套接字,安装等。
要进一步过滤单元文件,我们可以在list = unit-files中添加type =参数。
参数应为逗号分隔的单元类型列表。

systemctl列表服务

要列出我们的Linux服务器上所有已安装的systemctl服务,请执行以下操作:

# systemctl list-unit-files --type=service

systemctl列表服务

这应该为我们提供已安装服务的完整列表(与状态无关)

systemctl列表挂载文件

使用systemd,所有分区和文件系统都作为安装类型单元文件的一部分被安装。
因此,我们还可以使用type = mount列出服务器上可用的所有安装类型单元文件。

# systemctl list-units --all --type=mount

systemctl列表安装

我们可以将其与其他不同类型的单位文件(例如套接字,目标文件等)一起使用。

列出服务状态

说明:

要检查服务是否已启用/禁用/静态/间接,我们必须将" list-unit-files"与" systemctl"一起使用,同时要检查服务是否正在运行/活动/失败/失效等,则必须使用systemctl list -units
要获得带有list-units--state的受支持选项的完整列表,请使用systemctl --state = help

systemctl列表启用的服务

要列出当前处于启用状态的所有服务单元文件,请使用--state = enabled

# systemctl list-unit-files --type=service --state=enabled

systemctl列表启用的服务

systemctl列出了禁用的服务

我们可以通过--state =参数提供多个状态类型,其中各个状态值将以逗号分隔。
例如列出所有启用或者禁用的systemctl服务

# systemctl list-unit-files --type=service --state=enabled,disabled

systemctl列表启用和禁用的服务

systemctl列表运行服务

为了列出正在运行的服务,我们将结合使用list-units和--type = service和--state = running。

# systemctl list-units --type=service --state=running

systemctl列表运行服务

systemctl列出失败的服务

要列出失败的服务,我们可以使用--state = failed

# systemctl list-units --type=service --state=failed

或者,我们可以直接使用

# systemctl --failed

systemctl列出失败的服务

检查单个单位文件的服务状态

现在,以上命令将为我们提供服务器上已安装或者可用的所有单位文件的状态。
要检查单个文件的状态,我们不想将这些命令与grep和其他过滤器实用程序结合使用。

现在假设我想检查sshd服务的状态。
所以我可以用

# systemctl status sshd

这可以给我一长串输出以及实际状态,例如活动,正在加载。
现在,这三个状态也可以使用单位文件的属性进行单独修改

要检查systemctl服务是否正在运行,请使用:

# systemctl show sshd --property=SubState
SubState=running

要检查服务是处于"活动"还是"非活动"状态:

# systemctl show sshd --property=ActiveState
ActiveState=active

或者,我们也可以使用:

# systemctl is-active sshd
active

要检查服务是否已加载:

# systemctl show sshd --property=LoadState
LoadState=loaded

因此,我们可以使用服务的属性单独grep各个服务的状态。
要列出服务的所有属性,可以使用:

# systemctl show <service>