zoukankan      html  css  js  c++  java
  • 43) 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的日志

  • 相关阅读:
    动态Webapi参考资料
    解决异步事务好文章
    .net core 插件开发
    端口被占用代码
    性能测试
    .NET/.NET Core 单元测试:Specflow
    Autofac 替换默认控制器骚操作
    Swagger非常好的文章
    sqlserver入门到精通(2016安装教程)
    springboot 学习之路 27(实现ip白名单功能)
  • 原文地址:https://www.cnblogs.com/lemanlai/p/12489385.html
Copyright © 2011-2022 走看看