最近在进行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 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐