systemd命令详解:服务管理实战指南
最近在进行Docker的学习中,需要使用systemd命令管理Docker进程。便想着把systemd的命令整理成文档,方便使用。
一、为什么需要systemd?
systemd是Linux系统的初始化系统和服务管理器,取代了传统的SysV init。它通过并行启动大幅提升系统启动速度,并统一管理服务、挂载点、套接字、定时器等资源。我们日常最常用的就是systemctl和journalctl命令。
二、服务管理核心命令:systemctl
以下命令均需root权限(或sudo)。
1. 查看服务状态
bash
# 查看单个服务的详细状态 systemctl status docker # 列出所有已激活的服务单元 systemctl list-units --type=service # 列出所有服务(含未激活) systemctl list-units --type=service --all
2. 启动 / 停止 / 重启 / 重载
bash
systemctl start docker # 启动 systemctl stop docker # 停止 systemctl restart docker # 重启(先停再启) systemctl reload docker # 平滑重载配置(仅支持热加载的服务)
3. 开机自启管理
bash
systemctl enable docker # 设置开机自启(创建软链接) systemctl disable docker # 取消开机自启 systemctl is-enabled docker # 查看是否已启用
4. 其他常用操作
bash
# 检查服务是否正在运行 systemctl is-active docker # 杀死服务进程(发送指定信号) systemctl kill -s SIGKILL docker # 屏蔽服务(禁止手动或自动启动) systemctl mask docker # 解除屏蔽 systemctl unmask docker
三、服务单元文件(.service)管理
systemd通过单元文件定义服务,通常位于/etc/systemd/system/(用户自定义)或/usr/lib/systemd/system/(软件包自带)。
查看与编辑单元文件
bash
# 查看单元文件内容 systemctl cat docker # 编辑单元文件(自动处理重载) systemctl edit docker # 创建覆盖片段(推荐,不影响原文件) systemctl edit --full docker # 编辑完整文件
修改后重新加载并生效
bash
systemctl daemon-reload # 重新加载所有单元文件 systemctl restart docker
创建一个Docker守护进程服务
创建/etc/systemd/system/docker.service:
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock --selinux-enabled=false --de>
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
然后:
bash
systemctl daemon-reload systemctl enable docker.service systemctl start docker.service
四、日志查看:journalctl
systemd自带的日志系统,统一管理所有服务的日志。
常用命令
bash
# 查看所有日志(按时间顺序) journalctl # 查看指定服务的日志 journalctl -u docker # 实时跟踪日志(类似 tail -f) journalctl -u docker -f # 显示本次启动以来的日志 journalctl -b # 查看最近20行 journalctl -u docker -n 20 # 按时间过滤(今天) journalctl --since today # 指定时间段 journalctl --since "2026-04-22 09:00:00" --until "2026-04-22 12:00:00"
常用参数组合
bash
# 显示详细输出(含PID、用户等) journalctl -u docker -o verbose # 分页显示(默认less,按Q退出) journalctl -u docker | less
五、实战排错示例
场景:Docker启动失败,如何排查?
-
查看服务状态
bash
systemctl status docker # 以下是两种情况,主要看Active后的值,里面包含状态(failed、active等).如果显示failed,会给出错误行和提示。 Active: failed (Result: timeout) since Wed 2026-04-22 13:44:27 CST; 7s ago Active: active (running) since Wed 2026-04-22 13:45:49 CST; 3s ago
-
查看详细日志
bash
journalctl -u docker -n 50 --no-pager
-
检查单元文件是否有误
bash
systemctl cat docker
-
手动测试服务配置(针对具体服务)
bash
docker pull hello-world # 拉取简单的hello world镜像 docker run hello-world # 执行查看是否正常。
-
重载并重启
bash
systemctl daemon-reload systemctl restart nginx
六、补充:管理其他类型的单元
除了服务(.service),systemd还能管理:
-
定时器(.timer)—— 替代cron
-
套接字(.socket)—— 按需激活
-
挂载点(.mount)
常用命令通用:
bash
systemctl list-timers # 查看所有定时器 systemctl status backup.timer systemctl start backup.timer
小结
| 需求 | 命令 |
|---|---|
| 启动服务 | systemctl start xxx |
| 停止服务 | systemctl stop xxx |
| 重启服务 | systemctl restart xxx |
| 开机自启 | systemctl enable xxx |
| 查看状态 | systemctl status xxx |
| 查看日志 | journalctl -u xxx |
| 重载配置 | systemctl daemon-reload |
掌握以上命令,足以应对日常服务管理及排错。后续文章会深入单元文件编写、timer替代cron等进阶内容,敬请期待。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)