Linux Systemd 的使用

简述:

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网络技术分享
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容