最近在进行Docker的学习中,需要使用systemd命令管理Docker进程。便想着把systemd的命令整理成文档,方便使用。

一、为什么需要systemd?

systemd是Linux系统的初始化系统和服务管理器,取代了传统的SysV init。它通过并行启动大幅提升系统启动速度,并统一管理服务、挂载点、套接字、定时器等资源。我们日常最常用的就是systemctljournalctl命令。

二、服务管理核心命令: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启动失败,如何排查?

  1. 查看服务状态

    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
    
  2. 查看详细日志

    bash

    journalctl -u docker -n 50 --no-pager
  3. 检查单元文件是否有误

    bash

    systemctl cat docker
  4. 手动测试服务配置(针对具体服务)

    bash

    docker pull hello-world # 拉取简单的hello world镜像
    docker run hello-world # 执行查看是否正常。
    
  5. 重载并重启

    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等进阶内容,敬请期待。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐