systemctl命令:从入门到实践,掌握Linux服务管理
侧边栏壁纸
  • 累计撰写 146 篇文章
  • 累计收到 2 条评论

systemctl命令:从入门到实践,掌握Linux服务管理

soulio
2024-09-28 / 0 评论 / 7 阅读 / 正在检测是否收录...

一、命令简介

命令【用途】

systemctl​ 命令用于管理系统服务,包括查看、启动、停止、重启、启用或禁用服务。

什么是【服务】

Linux 系统服务,也称为守护进程(daemon),是在后台运行的服务程序,它们在系统启动时开始运行,并在系统关闭时停止。这些服务负责执行系统所需的任务,比如网络连接、文件共享、数据库服务等。

image

​​

服务【特点】

  1. 后台运行:服务通常在后台运行,不依赖于用户界面。
  2. 自动启动:许多服务配置为在系统启动时自动运行。
  3. 长时间运行:服务通常会长时间运行,只有在系统关闭或特定事件发生时才会停止。
  4. 独立于用户会话:即使没有用户登录,服务也可以运行。
  5. 网络能力:许多服务能够通过网络与其他计算机或服务进行通信。

image

服务【使用场景】

  1. 网络服务:如 Web 服务器、邮件服务器、文件服务器等,它们提供网络上的数据传输和处理能力。
  2. 系统服务:如打印服务、时间同步服务、日志服务等,它们帮助维护系统的正常运行。
  3. 安全服务:如防火墙、病毒扫描服务等,它们保护系统免受外部威胁。
  4. 数据库服务:如 MySQL、PostgreSQL 等,它们提供数据存储和管理功能。
  5. 应用程序服务:如消息队列、缓存服务等,它们为其他应用程序提供支持。

二、命令参数

systemctl 操作 [服务] 

操作:

  • start​: 启动一个服务
  • stop​: 停止一个服务
  • restart​: 重启一个服务
  • reload​: 重新加载配置文件,不会重启服务
  • status​: 显示服务的当前状态
  • enable​: 在系统启动时启用一个服务
  • disable​: 在系统启动时禁用一个服务
  • is-active​: 检查服务是否处于活动状态
  • is-enabled​: 检查服务是否在启动时启用
  • is-failed​: 检查服务是否启动失败

服务:

  • 要操作的服务的名称,比如 nginx、docker ...

三、命令示例

systemctl 命令需要 sudo 权限运行,或者切换到 root 身份运行。

image

查看运行中的服务-树状图

执行以下命令

systemctl status

将以树状图列出正在运行的服务

Clip_2024-09-27_20-55-36

启动一个服务

以 nginx 和 docker 为例,演示如何启动一个服务

#启动nginx服务
sudo systemctl start nginx

#启动docker服务
sudo systemctl start docker

输出

  • 启动成功,不会输出任何提示。

  • 启动失败,提示:试图启动没有安装的服务。

Clip_2024-09-27_23-23-04

  • 非 root、非 sudo 启动、停止服务会提示:权限验证

Clip_2024-09-27_23-24-39

​​

停止一个服务

#停止 nginx 服务
sudo systemctl stop nginx

#停止 docker 服务
sudo systemctl stop docker

执行成功,不会输出任何提示。

重新启动一个服务

sudo systemctl restart nginx

执行成功,不会输出任何提示。

显示一个服务的状态

sudo systemctl status nginx

运行状态:

  • 绿色指示灯亮
  • 可以获取 CPU、内存等资源使用量
  • 可以获取进程号等信息
  • 往下翻可以看见服务日志,启动,停止记录

Clip_2024-09-27_21-06-51

停止状态:

  • 指示灯灭
  • 服务日志

Clip_2024-09-27_21-08-33

启用一个服务,使其在系统启动时自动启动

后面都已 nginx 服务为例,启动 nginx 服务,执行以下命令

sudo systemctl enable nginx

执行成功,提示如下

Clip_2024-09-27_21-19-39

📝 注意:systemctl enable 和 disable 不会立刻改变 nginx 服务的状态,它只决定系统启动时是否自动启动 nginx 服务。

禁用一个服务,使其在系统启动时不自动启动

停止 nginx 服务,执行以下命令

sudo systemctl disable nginx

执行成功,提示如下

Clip_2024-09-27_21-20-59

修改 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
  • 输出服务列表

image

  • 结合 wc 命令可以统计服务数量
sudo systemctl list-units --type=service | wc

这里可以看到,当我停止 nginx 服务时,这台服务器运行着 69 个服务,随后我又启动了 nginx 服务,此时运行着 70 个服务。

Clip_2024-09-28_00-06-24

  • 结合 grep 命令可以筛选出指定服务的信息
sudo systemctl list-units --type=service | grep nginx

服务运行中,会返回服务的信息。服务已停止,则不会返回任何信息。

Clip_2024-09-28_00-11-29

如果要获取服务的全部信息,可以回顾上文提到的 sudo systemctl status nginx ​命令。

查看所有服务

下面这个命令提供服务的信息:

  • 服务单元文件的存在与否。
  • 每个服务单元文件的启用状态(enabled、disabled、static、masked)。
  • 服务单元文件的路径。
systemctl list-unit-files --type=service

列出所有服务的启用状态

image

即使服务处于 stop 状态,也会列出

Clip_2024-09-28_00-20-50

查看系统引导时间

下面这条命令查看系统应到时间,启动的服务越多,开机加载服务消耗的时间就越长。

systemd-analyze

例如,我这台服务器,引导总耗时约等于 10.5 秒

Clip_2024-09-28_00-23-14

  • 内核空间启动时间: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

海报

正在生成.....

评论 (0)

取消