systemctl · 服务管家
上游:sudo(管理服务必须 sudo)· ps(理解进程才能理解服务)· shell-script(服务本质上是自动运行的脚本) 下游:(Tier 4 终点,后续扩展见 Tier 5) 参见:cron(定时任务)· kill(紧急时手动结束进程)
一句话是什么
systemctl 管理 Linux 的系统服务——启动、停止、重启、开机自启,
就像一个总控台,管着所有后台运行的程序。
为什么需要它
你现在每次开机都要手动进终端运行 ./bedrock_server,
如果 Aaron 的笔记本重启了,服务器就断了,小伙伴连不上。
systemctl 让服务器开机自动启动,就算重启也不用管:
sudo systemctl enable mc-server # 设置开机自启
sudo systemctl start mc-server # 立刻启动以后笔记本每次开机,Minecraft 服务器自动在后台跑起来。
核心用法
公式
sudo systemctl [动作] [服务名]
常用命令表
| 操作 | 命令 | 说明 |
|---|---|---|
| 启动服务 | sudo systemctl start 服务名 | 立刻启动 |
| 停止服务 | sudo systemctl stop 服务名 | 立刻停止 |
| 重启服务 | sudo systemctl restart 服务名 | 停止再启动 |
| 查看状态 | sudo systemctl status 服务名 | 是否运行、日志尾部 |
| 开机自启 | sudo systemctl enable 服务名 | 下次开机自动启动 |
| 取消自启 | sudo systemctl disable 服务名 | 开机不再自动启动 |
| 查看所有服务 | systemctl list-units --type=service | 列出所有服务 |
服务文件(.service)
要让 systemctl 管理 Minecraft 服务器,需要写一个服务描述文件:
# 文件位置:/etc/systemd/system/mc-server.service
[Unit]
Description=Minecraft Bedrock Server
After=network.target
[Service]
Type=simple
User=aaron
WorkingDirectory=/home/aaron/mc-server
# 关键:Environment 让 bedrock_server 能找到自带的 .so 共享库
Environment="LD_LIBRARY_PATH=/home/aaron/mc-server"
ExecStart=/home/aaron/mc-server/bedrock_server
Restart=on-failure
[Install]
WantedBy=multi-user.target⚠️
LD_LIBRARY_PATH是什么:bedrock_server 运行时需要加载同目录下的 libCrypto.so.3 等库文件。 系统默认不去程序所在目录找,这一行告诉系统:「也去 /home/aaron/mc-server 找」。 不加的话服务会立刻失败,状态变成activating (auto-restart) (Result: exit-code)。
Linux 笑话
Aaron 正在打 Minecraft,突然 iPad 提示”已掉出服务器”。 他紧张地找爸爸:「服务器挂了!」
爸爸:sudo systemctl restart mc-server
Aaron:「好了!爸爸你修好了!」
爸爸:「我没修好什么,我只是让它重启了一遍。」
Aaron:「那问题呢?」
爸爸:「大部分问题重启就自己好了。实在不好再去看日志。」
这是运维工程师的公开秘密:重启是第一招,不是最后一招。
Linux 的服务设计思路是:写好服务文件 → 交给 systemd 管 →
崩了自动重启(Restart=on-failure),大部分时候根本不用人管。
例题精讲
📗 初探 Starter — 查看系统服务状态
# 查看 ssh 服务的状态(Aaron 笔记本上应该在运行)
sudo systemctl status ssh
# 输出大概是:
# ● ssh.service - OpenBSD Secure Shell server
# Loaded: loaded (/lib/systemd/system/ssh.service)
# Active: active (running) since ...
# Process: ExecStart=/usr/sbin/sshd -D
# Main PID: 1234 (sshd)
# 查看所有正在运行的服务(前 20 个)
systemctl list-units --type=service --state=running | head -20📘 应用 User — 注册 Minecraft 服务器为系统服务
# 第一步:创建服务文件
sudo nano /etc/systemd/system/mc-server.service
# 写入内容(把 aaron 改成你的用户名):
[Unit]
Description=Minecraft Bedrock Server
After=network.target
[Service]
Type=simple
User=aaron
WorkingDirectory=/home/aaron/mc-server
Environment="LD_LIBRARY_PATH=/home/aaron/mc-server"
ExecStart=/home/aaron/mc-server/bedrock_server
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
# 第二步:重新加载 systemd(让它读取新文件)
sudo systemctl daemon-reload
# 第三步:启动服务
sudo systemctl start mc-server
# 第四步:查看状态
sudo systemctl status mc-server
# 第五步:设置开机自启
sudo systemctl enable mc-server📙 管理 Admin — 完整的服务管理流程
# 查看服务日志(最近 50 行)
sudo journalctl -u mc-server -n 50
# 实时跟踪日志(Ctrl+C 停止)
sudo journalctl -u mc-server -f
# 服务崩溃后手动重启
sudo systemctl restart mc-server
# 更新了 bedrock_server 程序后,重启服务生效
sudo systemctl stop mc-server
# (替换 bedrock_server 文件)
sudo systemctl start mc-server
# 查看服务是否设置了开机自启
systemctl is-enabled mc-server
# enabled ← 是
# disabled ← 否官方文档参考
man systemctl # 完整手册
systemctl --help # 快速选项
systemctl是 systemd 的控制工具;服务描述文件放在/etc/systemd/system/,修改后需要daemon-reload。 在线:https://manpages.ubuntu.com/systemctl
节点链接
上游(理解服务之前需要这些)
- sudo ← 管理服务必须有管理员权限
- ps ← 服务本质是特殊管理的进程
- shell-script← 服务的 ExecStart 指向脚本或程序
同层
日志查看
- grep ← journalctl 输出可以用 grep 过滤
实战
- Minecraft-Bedrock-Server ← 注册 mc-server.service,实现开机自启
节点版本:v1.0 · 2026-04-20 Tier 4 终点节点——学完这个,Phase 4 自动化阶段完成