Systemd服务管理入门

Posted lemanlai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Systemd服务管理入门相关的知识,希望对你有一定的参考价值。

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- 处理服务依赖关系

  1. 单元A要求单元B在A启动之前运行
    B服务的单元文件:

    Unit
    Requires=B
    Afer=B
    参数Wants 和 Requires类似但存在区别,如果后面接的服务没有启动,其实不会影响到unit本身。

17- 定义服务启动类型Type

技术图片

18- 实战案例

需求:

  1. 写一段shell脚本程序,实地往/tmp/demo.log输出记录信息
  2. 将脚本加入服务单元服务文件
  3. 通过systemctl管理此程序

实现计划过程:

  1. 程序准备(编写测试脚本)
  2. 编写定义单元服务文件
  3. 启动及测试

实现过程

  1. 脚本

    cat demo.sh
    #!/bin/bash
    echo $$ > /var/run/demo.pid
    while:
    do
    echo "demo service" $(date) >> /tmp/demo.log
    sleep 1
    done

  2. 单元文件

    cat /usr/lib/systemd/system/demo.service
    Unit
    Description=run demo
    Documentation=https://demo.com
    Afer=Network-online.target
    Wants=network-online.target

    Service
    Type=simple
    PIDFile=/var/run/demo.pid
    ExecStart=/bin/bash /demo.sh
    ExecStop=/bin/kill -s TERM $MAINPID #shell命令使用绝对路径

    [Install[
    WantedBy=multi-user.target

  3. 验证

    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的日志

以上是关于Systemd服务管理入门的主要内容,如果未能解决你的问题,请参考以下文章

Systemd 入门教程:实战篇

systemd的简单使用和说明

linux入门Systemd指令防火墙

Linux系统入门---开机启动流程

UOS操作系统-使用Systemd管理系统服务

systemd管理服务