简述:
Systemd 是现代 Linux 系统中广泛使用的系统和服务管理器,用于初始化系统、管理系统服务和进程。它取代了传统的 SysVinit 和 Upstart,成为许多主流 Linux 发行版(如 RHEL、CentOS、Ubuntu、Fedora)的默认初始化系统。
常用命令:
命令 | 说明 |
---|---|
systemctl start <服务> | 启动服务 |
systemctl stop <服务> | 停止服务 |
systemctl restart <服务> | 重启服务 |
systemctl enable <服务> | 开机自启动 |
systemctl disable <服务> | 禁止开机启动 |
systemctl status <服务> | 查看服务状态 |
systemctl list-units --type=service | 列出所有服务单元 |
journalctl -xe | 查看详细日志 |
systemctl daemon-reload | 重新加载 systemd 配置文件 |
主要特点:
特点 | 说明 |
---|---|
并行启动 | 系统启动时能够并行启动服务,提高启动速度。 |
按需启动 | 仅在需要时启动服务,减少资源消耗。 |
服务依赖管理 | 服务之间的启动顺序、依赖关系通过单元文件(unit files)定义,实现精准控制。 |
统一管理接口 | 通过 systemctl 命令统一管理系统服务、挂载点、设备、定时任务等。 |
日志管理 | 集成 journald ,支持二进制格式日志,方便日志收集与分析。 |
动态设备管理 | 与 udev 集成,支持热插拔设备的自动配置。 |
用户空间实例 | 支持用户级 systemd 实例(systemd --user ),方便管理用户自身的服务。 |
支持 cgroups | 与 Linux 内核的 cgroups 控制组紧密结合,限制、监控和管理服务的资源使用。 |
超时和自动重启 | 服务启动超时或失败后,可自动重启,提高服务可靠性。 |
单元基本概念:
Unit(单元)systemd 的配置文件单位,用于描述服务、挂载点、设备、套接字等。
单元类型 | 文件扩展名 | 用途 |
---|---|---|
服务单元 | .service | 启动和管理后台服务(如守护进程) |
目标单元 | .target | 定义系统状态和多个服务的组合 |
套接字单元 | .socket | 管理套接字及其相关服务的激活机制 |
设备单元 | .device | 管理和控制硬件设备 |
挂载单元 | .mount | 文件系统挂载点 |
自动挂载单元 | .automount | 延迟挂载文件系统 |
路径单元 | .path | 监控文件路径变化并触发相关服务 |
定时器单元 | .timer | 定时执行任务(类似于 cron) |
切片单元 | .slice | 管理进程的资源限制 |
作用域单元 | .scope | 管理外部进程的资源 |
常用单元模版:
服务单元模版
(/etc/systemd/system/mytask.service
)
[Unit]
Description=定时运行的自定义脚本任务 # 服务描述信息,在 `systemctl status` 时显示
After=network.target # 定义服务启动的时机,这里是网络启动后
[Service]
ExecStart=/usr/bin/bash /path/to/myscript.sh # 运行的命令或脚本
WorkingDirectory=/path/to/ # 指定工作目录,脚本内的相对路径从这里开始
User=root # 以 root 用户运行该服务
Group=root # 指定用户组,通常和 User 一致
Restart=on-failure # 设置失败时自动重启策略,on-failure 表示失败时重启
Environment="ENV_VAR_NAME=value" # 设置环境变量,可选
[Install]
WantedBy=multi-user.target # 指定目标环境,默认多用户环境下启动
定时器单元模版
(/etc/systemd/system/mytask.timer
)
[Unit]
Description=定时触发 mytask.service 服务的定时器 # 定时器描述信息
[Timer]
OnCalendar=*-*-* 03:00:00 # 定时触发时间,cron-like 表达式,表示每天凌晨 3 点
Persistent=true # 系统关机错过任务后,下次开机自动补跑一次
Unit=mytask.service # 明确指定触发的服务单元文件名(通常同名,可以省略)
[Install]
WantedBy=timers.target # 表示定时器将在系统启动时启动(类似 cron)
常见的时间表达式 OnCalendar
表达式 | 含义 |
---|---|
*-*-* 03:00:00 | 每天凌晨 3 点 |
*-*-* *:00:00 | 每小时的整点 |
Mon *-*-* 04:00:00 | 每周一凌晨 4 点 |
*-*-01 05:00:00 | 每月 1 号凌晨 5 点 |
*-*-* 00,06,12,18:00:00 | 每天 0 点、6 点、12 点、18 点 |
2025-02-17 12:00:00 | 特定时间点,仅执行一次 |
docker 服务的状态实例图:
![图片[1]-Linux Systemd 的使用-IT网络技术分享](https://zywi.cn/wp-content/uploads/2025/02/20250215155454210-20250215155423-1024x470.jpg)
THE END
暂无评论内容