1- 介绍
Systemd是Centos7新采用的一套管理系统,可以实现启动及进程服务管理等,对比Centos6之前的SysVin体系,带来了很多突出的变化。
2- Systemd 变化
3- 变化
4- 注意事项
- 如果无扩展名,systemctl默认把扩展名当做 .service
- 挂载点、设备名称会完成自动转化为对应的单元
- 一个软件包可能会提供多个不同的单元
5- 基本命令
6- 管理命令
7- 优势
- 支持并行启动,显著提高开机启动效率
- Centos7关机只关闭正在运行的脚本
- 对于服务的管理不需要基于init.d下的脚本
- Systemd 解决原有模式的缺陷(service,syslog)
8- 命令使用
systemctl [options] command [name]
# options: 执行选项(非必须)
# command: 执行命令
# name: 单元名称(非必须)
例如:
systemctl --type service list-unit-files
9- target
- 涵盖启动基本的概念
- 目标或者组
- target间可以相互关联
10- 设置系统启动运行级别
11- 设置系统启动运行级别
12- 设置系统启动级别依赖关系
13- 服务管理
【ps】:
reload :热重载,主进程不变,子进程重启
restart : 主进程和子进程都重启
14- 编写单元文件
软件包安装的单元位置:/usr/lib/systemd/system/ [自定义的软件一般放在这里]
系统管理员安装的单元: /etc/systemd/system/
15- 服务单元文件配置
16- 处理服务依赖关系
-
单元A要求单元B在A启动之前运行
B服务的单元文件:Unit
Requires=B
Afer=B
参数Wants 和 Requires类似但存在区别,如果后面接的服务没有启动,其实不会影响到unit本身。
17- 定义服务启动类型Type
18- 实战案例
需求:
- 写一段shell脚本程序,实地往/tmp/demo.log输出记录信息
- 将脚本加入服务单元服务文件
- 通过systemctl管理此程序
实现计划过程:
- 程序准备(编写测试脚本)
- 编写定义单元服务文件
- 启动及测试
实现过程:
-
脚本
cat demo.sh
!/bin/bash
echo $$ > /var/run/demo.pid
while:
do
echo "demo service" $(date) >> /tmp/demo.log
sleep 1
done -
单元文件
cat /usr/lib/systemd/system/demo.service
Unit
Description=run demo
Documentation=https://demo.com
Afer=Network-online.target
Wants=network-online.targetService
Type=simple
PIDFile=/var/run/demo.pid *
ExecStart=/bin/bash /demo.sh*
ExecStop=/bin/kill -s TERM $MAINPID #shell命令使用绝对路径[Install[
WantedBy=multi-user.target -
验证
systemctl daemon-reload
systemctl start demo.service
19- Timer定时单元
分类: 单调定时器,实时定时器
19.1- 单调定时单元
从一个时间点过一段时间后激活定时任务。
19.2- 单调定时器
举例:
[Timer]
OnBootSec=15min #系统启动十五分钟后执行一次
OnUnitActiveSec=1w #上一次任务激活完成的每个一周执行一次
19.3- 实时定时器
通过日历事件激活定时任务,使用OnCalender= 的方式来定义实时定时器。
OnCalendar=*-*-* 00:00:00
举例:
[Timer]
OnCalendar = Fri 2020-11-12 11:11:11
或者:
[Timer]
OnCalendar= 2020-11-12 11:11:11
19.4- 案例
添加新的timer定时任务单元,定时调用服务单元demo.sh
比较:
服务单元 Timer单元
[Unit] [Unit]
[Service] [Timer]
[Install] [Install]
[Timer]
Unit=demo.service
Oncalendar=2020-11-12 11:11:13
systemctl start demo.timer
systemctl list-timers #查看所有定时任务
20- 日志管理 Journal
Systemd --> Journal --> RAM
RAM: 虚拟文件系统tmpfs,/run
20.1- 日志级别
20.2- Journalctl命令
journalctl [options] [matches]
-
journalctl 显示所有信息
-
notice或warning以粗体显示,红色显示error级别以上的信息
journalctl -n 20 ##查看最后二十行的日志
journalctl -f ##实时发现日志,类似于tail -f
journalctl -p err.. ## 查看err级别的日志
journalctl -u demo.service ##查看具体某个单元的日志
journalctl -b ##系统启动以后的日志
journalctl --since today ## 查看当什么时间开始后的
journalctl --until "30 min ago" ## 查看系统开始到多少时间之前的
journalctl --since today --until "2 hours agon"
journalctl _UID=1 ##查看PID/UID的日志