0Pricing
Linux Server Deployment & SSH Mastery · 课时

使用 systemd 管理系统服务

使用 systemd 控制驱动 Linux 服务器的长期运行程序:启动、停止、启用和检查服务,使用 journalctl 读取日志,并理解单元如何融入进程管理。

使用 systemd 管理系统服务 是 CoddyKit 上的免费 Linux Server Deployment & SSH Mastery 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Linux Server Deployment & SSH Mastery 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Linux Server Deployment & SSH Mastery 课程共包含 4 节课。

服务与普通进程

您已经管理过单个进程和计划任务。但定义服务器功能的程序——Web 服务器、数据库和 SSH——会作为服务运行:它们是应该在启动时自动运行,并在失败后重新启动的后台守护进程。

在现代 Linux 中,服务由systemd(系统和服务管理器)管理。

systemd 管理的内容

systemd 会将所有内容组织成单元。最常见的类型是 .service 单元,它描述了如何运行守护进程。

systemctl 命令是检查和控制这些单元的主要接口。

systemctl --version

检查服务状态

systemctl status 会显示服务是否正在运行、其主进程 ID、最近的日志行,以及它是否已设置为在启动时运行。

排查服务问题时,通常首先运行此命令。

systemctl status nginx

启动和停止服务

您可以使用 start、stop 和 restart 控制服务的运行状态。这些操作会立即生效,但不会改变启动行为。

当服务支持在不中断连接的情况下重新读取配置时,请使用 reload。

sudo systemctl start nginx
sudo systemctl restart nginx
sudo systemctl reload nginx
sudo systemctl stop nginx

设置服务在启动时运行

enable 会使服务在服务器启动时自动运行;disable 会将其从启动项中移除。这与服务当前是否正在运行无关。

便捷的 --now 标志可以一步完成启用和启动。

sudo systemctl enable nginx
sudo systemctl enable --now nginx
sudo systemctl disable nginx

列出服务

要查看已安装且正在运行的内容,请列出单元文件或活动单元。

  • list-units --type=service — 当前已加载的服务
  • list-unit-files --type=service — 所有已安装的服务及其启用状态
systemctl list-units --type=service --state=running
systemctl list-unit-files --type=service

使用 journalctl 读取日志

systemd 会将服务输出捕获到日志中。请使用 journalctl 查询。

  • -u nginx — 仅显示此服务
  • -f — 实时跟踪
  • -e — 跳转到末尾
sudo journalctl -u nginx -f
sudo journalctl -u ssh --since '1 hour ago'

单元文件的结构

服务由单元文件定义,通常位于 /etc/systemd/system/ 或 /lib/systemd/system/。它包含三个关键部分:[Unit]、[Service] 和 [Install]。

ExecStart 行会告诉 systemd 要运行哪个命令。

[Unit]
Description=My App
After=network.target

[Service]
ExecStart=/usr/bin/myapp --port 8080
Restart=on-failure

[Install]
WantedBy=multi-user.target

创建您自己的服务

要将自己的程序作为服务运行,请将单元文件放入 /etc/systemd/system/,重新加载 systemd 使其识别新文件,然后启用并启动服务。

修改任何单元文件后,都必须运行 daemon-reload。

sudo nano /etc/systemd/system/myapp.service
sudo systemctl daemon-reload
sudo systemctl enable --now myapp

失败时自动重启

systemd 的最佳功能之一是自动恢复。Restart= 指令会告诉它重新启动崩溃的服务。

  • Restart=on-failure — 仅在以非零状态退出后重启
  • Restart=always — 服务每次停止时都重启
  • RestartSec=5 — 重试前等待
[Service]
ExecStart=/usr/bin/myapp
Restart=always
RestartSec=5

最佳实践

请自信地管理服务:

  • 区分运行时操作(start)和启动设置(enable)
  • 编辑单元文件后运行 daemon-reload
  • 使用 journalctl -u 排查问题,而不要依赖零散的日志文件
  • 为需要高可靠性的自定义应用添加 Restart=on-failure

快速检查

测试您对 systemd 的掌握情况。

回顾

现在您可以使用 systemd 管理服务器服务:

  • status、start、stop、restart、reload
  • 使用 enable/disable 设置启动行为
  • 使用 journalctl -u 查看服务日志
  • 使用带有 Restart= 的自定义 .service 单元文件提高可靠性

这将长期运行的守护进程纳入了您的进程和任务管理技能。

常见问题解答

「使用 systemd 管理系统服务」课时是免费的吗?

是的 — 「使用 systemd 管理系统服务」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Linux Server Deployment & SSH Mastery 课程的其余内容,请升级到 CoddyKit PRO。 Linux Server Deployment & SSH Mastery 课程共包含 4 节课。

「使用 systemd 管理系统服务」这节课中我会学到什么?

使用 systemd 控制驱动 Linux 服务器的长期运行程序:启动、停止、启用和检查服务,使用 journalctl 读取日志,并理解单元如何融入进程管理。 你通过在浏览器中直接运行的动手代码来练习 Linux Server Deployment & SSH Mastery,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Linux Server Deployment & SSH Mastery 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Linux Server Deployment & SSH Mastery 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「使用 systemd 管理系统服务」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Linux Server Deployment & SSH Mastery 课中编写并运行代码吗?

能。每节 Linux Server Deployment & SSH Mastery 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 管理用户与组
  2. 监控系统进程
  3. 使用 Cron 调度任务
  4. 使用 systemd 管理系统服务
← 返回 Linux Server Deployment & SSH Mastery