systemd
systemd
# 列出docker 依赖发服务 [root@tencent-sh ~]# systemctl list-dependencies docker docker.service ● ├─containerd.service ● ├─docker.socket ● ├─system.slice ● ├─basic.target ● │ ├─rhel-dmesg.service ● │ ├─selinux-policy-migrate-local-changes@targeted.service ● │ ├─paths.target ● │ ├─slices.target ● │ │ ├─-.slice ● │ │ └─system.slice ● │ ├─sockets.target ● │ │ ├─dbus.socket ● │ │ ├─dm-event.socket ● │ │ ├─iscsid.socket ● │ │ ├─iscsiuio.socket ● │ │ ├─sharpd.socket ● │ │ ├─systemd-initctl.socket ● │ │ ├─systemd-journald.socket ● │ │ ├─systemd-shutdownd.socket ● │ │ ├─systemd-udevd-control.socket ● │ │ └─systemd-udevd-kernel.socket ● │ ├─sysinit.target ● │ │ ├─dev-hugepages.mount ● │ │ ├─dev-mqueue.mount ● │ │ ├─iscsi.service ● │ │ ├─kmod-static-nodes.service ● │ │ ├─lvm2-lvmetad.socket ● │ │ ├─lvm2-lvmpolld.socket ● │ │ ├─lvm2-monitor.service ● │ │ ├─openibd.service ● │ │ ├─plymouth-read-write.service ● │ │ ├─plymouth-start.service ● │ │ ├─proc-sys-fs-binfmt_misc.automount ● │ │ ├─rhel-autorelabel.service ● │ │ ├─rhel-domainname.service ● │ │ ├─rhel-import-state.service ● │ │ ├─rhel-loadmodules.service ● │ │ ├─sys-fs-fuse-connections.mount ● │ │ ├─sys-kernel-config.mount ● │ │ ├─sys-kernel-debug.mount ● │ │ ├─systemd-ask-password-console.path ● │ │ ├─systemd-binfmt.service ● │ │ ├─systemd-firstboot.service ● │ │ ├─systemd-hwdb-update.service ● │ │ ├─systemd-journal-catalog-update.service ● │ │ ├─systemd-journal-flush.service ● │ │ ├─systemd-journald.service ● │ │ ├─systemd-machine-id-commit.service ● │ │ ├─systemd-modules-load.service ● │ │ ├─systemd-random-seed.service ● │ │ ├─systemd-sysctl.service ● │ │ ├─systemd-tmpfiles-setup-dev.service ● │ │ ├─systemd-tmpfiles-setup.service ● │ │ ├─systemd-udev-trigger.service ● │ │ ├─systemd-udevd.service ● │ │ ├─systemd-update-done.service ● │ │ ├─systemd-update-utmp.service ● │ │ ├─systemd-vconsole-setup.service ● │ │ ├─cryptsetup.target ● │ │ ├─local-fs.target ● │ │ │ ├─-.mount ● │ │ │ ├─rhel-readonly.service ● │ │ │ ├─systemd-fsck-root.service ● │ │ │ └─systemd-remount-fs.service ● │ │ └─swap.target ● │ └─timers.target ● │ └─systemd-tmpfiles-clean.timer ● └─network-online.targe
概念:
Socket Unit:进程间通信的 socket Service Unit:系统服务 Target Unit:多个 Unit 构成的一个组
启动文件结构
配置文件位置 /usr/lib/systemd/system
[Unit] [Service] [Install]
第一部分 [Unit]
[Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network-online.target firewalld.service containerd.service # 要求当前服务在他们之后启动 Wants=network-online.target # 配合当前unit启动,如果network-online.target失败不会影响当前服务启动 Requires=docker.socket containerd.service # 当前 Unit 依赖的其他 Unit,如果它们没有运行,当前Unit会启动失败
第二部分 [Service]
[Service] Type=notify # 当前服务启动完毕,会通知Systemd,再继续往下执行 EnvironmentFile=/run/flannel/subnet.env # 文件是key=value的变量组成,可以在启动命令中通过 $key 的方式引用变量 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock #启动当前服务的命令 ExecReload=/bin/kill -s HUP $MAINPID # 重启当前服务时执行的命令 TimeoutSec=0 # 定义 Systemd 停止当前服务之前等待的秒数 RestartSec=2 # 自动重启当前服务间隔的秒数 Restart=always # 定义何种情况 Systemd 会自动重启当前服务,可能的值包括always(总是重启)、on-success、on-failure、on-abnormal、on-abort、on-watchdog
第三部分 [Install]
[Install] WantedBy=multi-user.target
测试事例
[root@test ~]# cat >>/run/flannel/subnet.env<<EOF FLANNEL_NETWORK=172.7.0.0/16 FLANNEL_SUBNET=172.7.21.1/24 FLANNEL_MTU=1500 FLANNEL_IPMASQ=false EOF
修改启动文件
EnvironmentFile=/run/flannel/subnet.env # 文件不存在是会报错 ExecStart=/usr/bin/dockerd \ -H fd:// --containerd=/run/containerd/containerd.sock \ --bip ${FLANNEL_SUBNET} \ --mtu=${FLANNEL_MTU}
修改/新建配置文件后使用 systemctl daemon-reload
加载配置文件
使用systemctl 管理的应用可以使用 journalctl -u flanneld
查看日志
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏