一、命令简介
命令【用途】
systemctl
命令用于管理系统服务,包括查看、启动、停止、重启、启用或禁用服务。
什么是【服务】
Linux 系统服务,也称为守护进程(daemon),是在后台运行的服务程序,它们在系统启动时开始运行,并在系统关闭时停止。这些服务负责执行系统所需的任务,比如网络连接、文件共享、数据库服务等。
服务【特点】
- 后台运行:服务通常在后台运行,不依赖于用户界面。
- 自动启动:许多服务配置为在系统启动时自动运行。
- 长时间运行:服务通常会长时间运行,只有在系统关闭或特定事件发生时才会停止。
- 独立于用户会话:即使没有用户登录,服务也可以运行。
- 网络能力:许多服务能够通过网络与其他计算机或服务进行通信。
服务【使用场景】
- 网络服务:如 Web 服务器、邮件服务器、文件服务器等,它们提供网络上的数据传输和处理能力。
- 系统服务:如打印服务、时间同步服务、日志服务等,它们帮助维护系统的正常运行。
- 安全服务:如防火墙、病毒扫描服务等,它们保护系统免受外部威胁。
- 数据库服务:如 MySQL、PostgreSQL 等,它们提供数据存储和管理功能。
- 应用程序服务:如消息队列、缓存服务等,它们为其他应用程序提供支持。
二、命令参数
systemctl 操作 [服务]
操作:
-
start
: 启动一个服务 -
stop
: 停止一个服务 -
restart
: 重启一个服务 -
reload
: 重新加载配置文件,不会重启服务 -
status
: 显示服务的当前状态 -
enable
: 在系统启动时启用一个服务 -
disable
: 在系统启动时禁用一个服务 -
is-active
: 检查服务是否处于活动状态 -
is-enabled
: 检查服务是否在启动时启用 -
is-failed
: 检查服务是否启动失败
服务:
- 要操作的服务的名称,比如 nginx、docker ...
三、命令示例
systemctl 命令需要 sudo 权限运行,或者切换到 root 身份运行。
查看运行中的服务-树状图
执行以下命令
systemctl status
将以树状图列出正在运行的服务
启动一个服务
以 nginx 和 docker 为例,演示如何启动一个服务
#启动nginx服务
sudo systemctl start nginx
#启动docker服务
sudo systemctl start docker
输出
启动成功,不会输出任何提示。
启动失败,提示:试图启动没有安装的服务。
- 非 root、非 sudo 启动、停止服务会提示:权限验证
停止一个服务
#停止 nginx 服务
sudo systemctl stop nginx
#停止 docker 服务
sudo systemctl stop docker
执行成功,不会输出任何提示。
重新启动一个服务
sudo systemctl restart nginx
执行成功,不会输出任何提示。
显示一个服务的状态
sudo systemctl status nginx
运行状态:
- 绿色指示灯亮
- 可以获取 CPU、内存等资源使用量
- 可以获取进程号等信息
- 往下翻可以看见服务日志,启动,停止记录
停止状态:
- 指示灯灭
- 服务日志
启用一个服务,使其在系统启动时自动启动
后面都已 nginx 服务为例,启动 nginx 服务,执行以下命令
sudo systemctl enable nginx
执行成功,提示如下
📝 注意:systemctl enable 和 disable 不会立刻改变 nginx 服务的状态,它只决定系统启动时是否自动启动 nginx 服务。
禁用一个服务,使其在系统启动时不自动启动
停止 nginx 服务,执行以下命令
sudo systemctl disable nginx
执行成功,提示如下
修改 systemd 配置
配置文件的位置
systemd 的主要配置文件是 /etc/systemd/system.conf
和 /etc/systemd/user.conf
,前者用于系统级别的配置,影响所有用户;后者用于用户级别的配置,仅影响特定用户。此外,还有一些针对特定服务的配置文件,通常位于 /etc/systemd/system/
下的服务名 .service
文件。
编辑 systemd 配置
专业命令:不要使用 vim 直接修改配置,要使用专业命令
systemctl edit
编辑配置。例如,如果要修改httpd
服务的配置,可以执行systemctl edit httpd
。这会创建一个/etc/systemd/system/httpd.service.d/override.conf
文件(如果该目录和文件不存在的话),在这个文件中可以添加或修改配置选项。编辑配置:假设要在启动
httpd
服务前添加一个自定义的环境变量,可以在override.conf
文件中添加如下内容[Service] Environment=MY_VARIABLE=value
修改后的配置要等到下次系统启动时才会被加载到程序内存中,除非使用重载命令。
重载 systemd 配置
修改 systemd 配置后需要使用以下命令重载 systemd 配置,让修改立即生效。
sudo systemctl daemon-reload
执行成功,不会输出任何提示。
查看所有运行中的服务-列表
下面这个命令提供服务的信息:
- 当前活跃的服务单元。
- 每个服务的加载状态(loaded)、活跃状态(active)、以及它们的状态(例如,running、exited、failed)。
- 服务的启动类型(例如,simple、forking、oneshot、notify、dbus)。
sudo systemctl list-units --type=service
- 输出服务列表
- 结合 wc 命令可以统计服务数量
sudo systemctl list-units --type=service | wc
这里可以看到,当我停止 nginx 服务时,这台服务器运行着 69 个服务,随后我又启动了 nginx 服务,此时运行着 70 个服务。
- 结合 grep 命令可以筛选出指定服务的信息
sudo systemctl list-units --type=service | grep nginx
服务运行中,会返回服务的信息。服务已停止,则不会返回任何信息。
如果要获取服务的全部信息,可以回顾上文提到的 sudo systemctl status nginx
命令。
查看所有服务
下面这个命令提供服务的信息:
- 服务单元文件的存在与否。
- 每个服务单元文件的启用状态(enabled、disabled、static、masked)。
- 服务单元文件的路径。
systemctl list-unit-files --type=service
列出所有服务的启用状态
即使服务处于 stop 状态,也会列出
查看系统引导时间
下面这条命令查看系统应到时间,启动的服务越多,开机加载服务消耗的时间就越长。
systemd-analyze
例如,我这台服务器,引导总耗时约等于 10.5 秒
- 内核空间启动时间:
2.296s (kernel)
表示系统启动过程中内核初始化、加载驱动等内核相关操作所花费的时间为 2.296 秒。 - 用户空间启动时间:
8.126s (userspace)
意味着在用户空间中,启动各种服务、初始化用户环境等操作花费了 8.126 秒。用户空间包含了运行在操作系统之上的各种应用程序、服务等。 - 总启动时间:
= 10.423s
是内核空间启动时间和用户空间启动时间的总和,即从系统开始启动到用户空间基本初始化完成总共花费了 10.423 秒。
注意事项
- 运行
systemctl
命令通常需要 root 权限或使用sudo
。 - 请谨慎操作系统服务,特别是启用和禁用服务,以避免影响系统稳定性。
- 在不同的 Linux 发行版中,
systemctl
的使用可能会有一些差异。 -
systemctl
实际上是一个指向systemd
的命令,用于与systemd
服务管理系统进行交互。
本文共 1721 个字数,平均阅读时长 ≈ 5分钟
评论 (0)