使用 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 反馈 — 无需本地设置。
此课程中的所有课时
- 管理用户与组
- 监控系统进程
- 使用 Cron 调度任务
- 使用 systemd 管理系统服务