所有托管服务节省 15%

测试技能,享折扣

使用代码: Skills 开始使用
China
Linux

Systemctl 命令:如何在 Linux 中重启、重新加载和停止服务

对于任何 Linux 系统管理员来说,高效地管理服务是最关键的技能之一。无论您是在 VPS Hosting 计划上运行高流量网络服务器,还是维护 Dedicated Server 环境,了解如何使用 systemctl 控制系统服务是绝对必要的。本综合指南涵盖了您需要了解的关于使用 systemdsystemctl 在 Linux 中重启、重新加载和停止服务的所有内容。

什么是 systemd 以及为什么它很重要?

systemd 是几乎所有现代 Linux 发行版(包括 Ubuntu、Debian、CentOS、Rocky Linux、AlmaLinux 和 Fedora)中使用的默认 init 系统和服务管理器。它取代了 SysVinit 和 Upstart 等较旧的 init 系统,为 Linux 启动和进程管理方式带来了重大改进。

systemd 的主要特性

  • 并行服务启动 — 通过并发启动服务大幅减少启动时间
  • 按需服务激活 — 服务只在需要时启动,节省系统资源
  • 依赖关系管理 — 自动处理服务依赖关系和顺序
  • 集中式日志记录 — 与 journald 集成,实现统一的结构化日志管理
  • 基于 Cgroup 的资源控制 — 跟踪和限制每个服务的 CPU、内存和 I/O 使用情况
  • Socket 和 D-Bus 激活 — 启用高级进程间通信模式

理解 systemd 不仅仅是学术问题 — 它直接影响 Linux 环境的稳定性、性能和安全性。

什么是 systemctl?

systemctl 是与 systemd 交互的主要命令行界面。它允许管理员:

  • 启动、停止、重启和重新加载服务
  • 在启动时启用或禁用服务
  • 检查服务状态和查看日志
  • 管理系统目标(运行级别)
  • 重新加载 systemd 守护进程配置

所有修改系统状态的 systemctl 命令都需要 root 权限sudo 访问权限。

服务管理的核心 systemctl 命令

1. 重启服务

重启服务会完全停止它,然后重新启动。这是以下情况下的首选操作:

  • 您已进行需要完整进程重启的配置更改
  • 服务已崩溃或变得无响应
  • 在包升级后需要应用更新的二进制文件

语法:

sudo systemctl restart <service_name>

示例 — 重启 Nginx 网络服务器:

sudo systemctl restart nginx

示例 — 重启 Apache 网络服务器:

sudo systemctl restart apache2

示例 — 重启 MySQL/MariaDB 数据库:

sudo systemctl restart mysql

> 重要:重启服务会导致短暂中断。对于生产环境,在支持的情况下考虑使用 reload 以避免停机。

2. 重新加载服务

重新加载指示运行中的服务重新读取其配置文件而不停止进程。这非常适合在零停机时间内应用配置更改。

语法:

sudo systemctl reload <service_name>

示例 — 编辑配置后重新加载 Nginx:

sudo systemctl reload nginx

示例 — 修改 sshd_config 后重新加载 SSH 守护进程:

sudo systemctl reload sshd

> 注意:并非所有服务都支持 reload 操作。如果服务未实现它,systemctl 将返回错误。在这些情况下,改用 restart

专业提示 — 使用 reload-or-restart 以获得最大兼容性:

sudo systemctl reload-or-restart <service_name>

此命令首先尝试重新加载。如果服务不支持重新加载,它会自动回退到完整重启 — 使其成为脚本部署和自动化的最安全选项。

3. 停止服务

停止服务会立即终止它。当您需要使服务离线以进行维护、故障排除或重新配置时,请使用此命令。

语法:

sudo systemctl stop <service_name>

示例 — 停止 Nginx 网络服务器:

sudo systemctl stop nginx

示例 — 停止防火墙服务:

sudo systemctl stop ufw

> 警告:停止关键服务(如远程服务器上的 sshd)可能会将您锁定在系统之外。在停止基本服务之前,始终确保您有替代访问方法,例如控制台或带外管理。

4. 启动服务

如果服务当前未运行,请使用 start 命令启动它。

语法:

sudo systemctl start <service_name>

示例:

sudo systemctl start nginx

5. 在启动时启用服务

启用服务会创建必要的符号链接,以便 systemd 在系统启动期间自动启动它。

语法:

sudo systemctl enable <service_name>

示例:

sudo systemctl enable nginx

同时启用和启动(推荐):

sudo systemctl enable --now nginx

6. 在启动时禁用服务

禁用服务会阻止它自动启动,但不会停止它(如果它当前正在运行)。

语法:

sudo systemctl disable <service_name>

示例:

sudo systemctl disable bluetooth

同时禁用和停止:

sudo systemctl disable --now bluetooth

7. 检查服务状态

status 命令是最常用的 systemctl 命令之一。它提供服务状态的实时快照,包括最近的日志条目。

语法:

sudo systemctl status <service_name>

示例 — 检查 Nginx 的状态:

sudo systemctl status nginx

示例输出:

● 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 Mon 2024-01-15 10:23:45 UTC; 2h 34min ago
       Docs: man:nginx(8)
    Process: 1234 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 1235 (nginx)
      Tasks: 3 (limit: 4915)
     Memory: 6.2M
        CPU: 45ms
     CGroup: /system.slice/nginx.service
             ├─1235 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
             └─1236 "nginx: worker process"

输出包括:

  • Loaded — 单元文件是否已加载以及是否在启动时启用
  • Active — 当前运行状态(active (running)inactive (dead)failed 等)
  • Main PID — 服务的主进程 ID
  • Memory/CPU — 资源消耗指标
  • CGroup — 控制组层次结构
  • Recent logs — 最后几个日志条目,用于快速诊断

高级 systemctl 命令

检查服务是否活跃或已启用

对于脚本和自动化使用,这些命令返回简单的布尔式退出代码:

# Check if a service is currently running
systemctl is-active nginx

# Check if a service is enabled at boot
systemctl is-enabled nginx

# Check if a service has failed
systemctl is-failed nginx

列出所有服务

# List all loaded and active units
systemctl list-units --type=service

# List all installed unit files and their states
systemctl list-unit-files --type=service

# List only failed services
systemctl --failed

重新加载 systemd 守护进程

创建或修改单元文件后,必须重新加载 systemd 守护进程以识别更改:

sudo systemctl daemon-reload

屏蔽和取消屏蔽服务

屏蔽服务可防止它被手动或自动启动 — 即使由其他服务启动:

# Prevent a service from ever starting
sudo systemctl mask <service_name>

# Re-enable a masked service
sudo systemctl unmask <service_name>

快速参考:systemctl 命令速查表

命令描述
systemctl start <service>启动已停止的服务
systemctl stop <service>停止运行中的服务
systemctl restart <service>停止并重启服务
systemctl reload <service>重新加载配置而不停止
systemctl reload-or-restart <service>如果支持则重新加载,否则重启
systemctl enable <service>在启动时启用服务
systemctl disable <service>在启动时禁用服务
systemctl enable --now <service>启用并立即启动
systemctl disable --now <service>禁用并立即停止
systemctl status <service>显示服务状态和日志
systemctl is-active <service>检查服务是否正在运行
systemctl is-enabled <service>检查服务是否在启动时启动
systemctl is-failed <service>检查服务是否失败
systemctl list-units --type=service列出所有活跃服务
systemctl --failed列出所有失败的服务
systemctl daemon-reload重新加载 systemd 单元文件
systemctl mask <service>完全防止服务启动
systemctl unmask <service>移除服务的掩码

服务器管理员的实际使用案例

场景 1:应用 Nginx 配置更改

您已在 Web 服务器上编辑了 /etc/nginx/nginx.conf。要在不断开活动连接的情况下应用更改:

# First, test the configuration syntax
sudo nginx -t

# If the test passes, reload gracefully
sudo systemctl reload nginx

场景 2:恢复失败的服务

服务已崩溃并显示 failed 状态:

# Check what went wrong
sudo systemctl status myapp.service

# View full logs for the service
sudo journalctl -u myapp.service -n 50 --no-pager

# Restart the service
sudo systemctl restart myapp.service

场景 3:部署后设置新服务

在使用自定义单元文件部署新应用程序后:

# Reload systemd to recognize the new unit file
sudo systemctl daemon-reload

# Enable and start the service in one command
sudo systemctl enable --now myapp.service

# Verify it's running correctly
sudo systemctl status myapp.service

restart、reload 和 stop 之间的区别 — 一览表

操作进程已停止?停机时间?用例
stop维护、故障排除
restart是,然后重新启动短暂需要完全重启的配置更改
reload零停机时间的配置更改
reload-or-restart仅在需要时最少安全的自动化和脚本编写

在不同托管环境中管理服务

本指南中涵盖的 systemctl 命令适用于所有基于 Linux 的托管环境。无论您是在 带有 cPanel 的 VPS 上还是在裸机 专用服务器上管理服务,systemd 都为服务管理提供了一致、可靠的界面。

对于运行 Web 应用程序的团队,使用适当的 SSL/TLS 加密来保护您的服务同样重要。AlexHost 提供 SSL 证书来帮助您保护 Web 服务并建立用户信任——安装证书后,只需一个简单的 sudo systemctl reload nginxsudo systemctl reload apache2 即可应用新配置,无需停机。

如果您正在构建新项目并需要可靠的基础,请考虑从 共享 Web 托管开始处理较小的工作负载,然后随着需求增长扩展到完整的 VPS 或专用服务器。

结论

掌握 systemctl 命令是任何在生产环境中管理 Linux 服务器的人的基本要求。能够高效地重启重新加载停止服务 — 以及理解这些操作之间的区别 — 直接影响您系统的可用性、性能和可维护性。

以下是关键要点的快速总结:

  • 当您需要完整的服务周期时使用 restart — 停止并重新启动进程
  • 当服务支持时,使用 reload 进行零停机时间配置更新
  • 在脚本中使用 reload-or-restart 以获得最大兼容性和安全性
  • 使用 stop 进行计划维护或当服务需要离线时
  • 始终使用 systemctl statusjournalctl 在更改前后诊断问题

有了这些命令在您的工具包中,您将能够很好地维护稳定、高性能的 Linux 环境 — 无论您是管理单个 VPS 还是整个专用服务器群。