zoukankan      html  css  js  c++  java
  • systemd

    1、简介:

    systemd即为system daemon,是linux下的一种init软件(Linux下,init主要有三个实现版本:System V,传统的init; Upstart,Ubuntu后期针对sys-v的一个改进实现版本; systemd)。启动并维护各种用户空间的服务。都是以  .service为文件后缀。

    2、目录:

    /usr/lib/systemd/system

    或者是  /etc/systemd/system/

    3、systemctl

    systemctl是一个systemd工具,主要负责控制systemd系统和服务管理器。

    4、服务类型 unit 的详细配置

    配置文件分为三个部分,每个部分中都可以提供详细的配置信息。

    [Unit] 部分
    Description    关于该 unit 的简易说明。
    Documentation    文档相关的内容,如 Documentation=https://prometheus.io/docs/introduction/overview/
                                   Documentation=man:sshd(8)
                                   Documentation=file:/etc/ssh/sshd_config
    After    说明本 unit 是在哪个服务启动之后才启动的意思。仅是说明服务启动的顺序而已,并没有强制要求 。
    Before    与 After 的意义相反,在指定的服务启动前最好启动本个服务的意思。仅是说明服务启动的顺序而已,并没有强制要求 。
    Requires    本 unit 需要在哪个服务启动后才能够启动!就是设置服务间的依赖性。如果在此项设置的前导服务没有启动成功,那么本 unit 就不会被启动!
    Wants    与 Requires 刚好相反,规范的是这个 unit 之后还要启动什么服务,如果这 Wants 后面接的服务如果没有启动成功,其实不会影响到这个 unit 本身!
    Conflicts    这个项目后面接的服务如果有启动,那么本 unit 就不能启动!如果本 unit 启动了,则指定的服务就不能启动。

    [Service] 部分
    Type
    说明这个服务的启动方式,会影响到 ExecStart,主要有下面几种类型:
    simple:默认值,这个服务主要由 ExecStart 设置的程序来启动,启动后常驻于内存中。
    forking:由 ExecStart 指定的启动的程序通过 spawns 产生子进程提供服务,然后父进程退出。
    oneshot:与 simple 类似,不过这个程序在工作完毕后就结束了,不会常驻在内存中。
    dbus:与 simple 类似,但这个服务必须要在取得一个 D-Bus 的名称后,才会继续运行!因此设置这个项目时,通常也要设置 BusName= 才行。
    idle:与 simple 类似,意思是,要执行这个服务必须要所有的工作都顺利执行完毕后才会执行。这类的服务通常是开机到最后才执行即可的服务。
    notify:与 simple 类似,但这个服务必须要收到一个 sd_notify() 函数发送的消息后,才会继续运行。

    ExecStart
    就是实际执行此服务的程序。接受 "命令 参数 参数..." 的格式,不能接受 <, >, >>, |, & 等特殊字符,很多的 bash 语法也不支持。所以,要使用这些特殊的字符时,最好直接写入到脚本里面去!

    ExecStartPre 和 ExecStartPost 分别在服务启动前后,执行额外的命令。

    ExecStop 用来实现 systemctl stop 命令,关闭服务。
    ExecReload 用来实现 systemctl reload 命令,重新加载服务的配置信息。

    Restart 当设置为 Restart=1 时,如果服务终止,就会自动重启此服务。
    RestartSec 与 Restart 配合使用,在服务终止多长时间之后才重新启动它。默认是 100ms。

    RemainAfterExit
    当设置为 RemainAfterExit=1 时,则当这个服务所属的所有程序都终止之后,此服务会再尝试启动。这对于 Type=oneshot 的服务很有帮助!

    [Install] 部分
    WantedBy    这个设置后面接的大部分是 *.target unit。意思是,这个 unit 本身是附挂在哪个 target unit 下面。
    Also    当目前这个 unit 被 enable 时,Also 后面接的 unit 也要 enable 的意思。
    Alias    当 systemctl enable 相关的服务时,则此服务会进行链接文件的创建!

    5、Timer 类型 unit 的详细配置

    Timer 类型的 unit 主要用来执行定时任务,并有可能取代 cron 服务。由于 timer 类型的 unit 经常与服务类型的 unit 一起使用,所以本文也附带介绍一下 timer unit 的配置。与服务类型的 unit 不同,timer unit 配置文件中的主要部分是 [Timer],下面是其主要的配置项:
    OnActiveSec    当 timers.target 启动后多久才执行这个 unit。
    OnBootSec    当开机后多久才执行这个 unit。
    OnStartupSec    当 systemd 第一次启动后多久才执行这个 unit。
    OnUnitActiveSec    这个 timer 配置文件所管理的那个 unit 服务在最后一次启动后,隔多久后再执行一次。
    OnUnitInactiveSec    这个 timer 配置文件所管理的那个 unit 服务在最后一次停止后,隔多久后再执行一次。
    Unit    一般不需要设置,基本上我们设置都是 服务名称.server + 服务名称.timer。如果你的服务名称和 timer 名称不相同,就需要在 .timer 文件中通过 Unit 项指定服务的名称。
    OnCalendar    使用实际时间(非循环时间)的方式来启动服务。
    Persistent    当使用 OnCalendar 的设置时,指定该功能要不要持续执行。

    6、一次性服务

    Type=oneshot 用于那些只需要执行一次性动作而不需要持久运行的单元, 例如文件系统检查或者清理临时文件。 此类单元, 将会在启动后一直等待指定的动作完成, 然后再回到停止状态。 下面是一个执行清理动作的单元:

    [Unit]
    Description=清理老旧的 Foo 数据
    
    [Service]
    Type=oneshot
    ExecStart=/usr/sbin/foo-cleanup     #后面跟程序的绝对路径,如果有启动参数,后面加上,  ExecStart=/home/catchlog.sh (或者绝对路径 ExecStart=/tsd/bin/cns-gateway)
    
    [Install]
    WantedBy=multi-user.target

    7、通过脚本定时备份文件

    备份文件的 bash 脚本:

    #!/bin/bash
    mydate()
    {
            date "+%Y%m%d%H%M%S"
    }
    backupdate=$(mydate)
    tar -zcf /tmp/backup.${backupdate}.tar.gz /home/nick/learn

    把上面的代码保存到文件 /usr/local/bin/backupdir.sh,并添加可执行权限:

    $ sudo chmod +x /usr/local/bin/backupdir.sh

    然后创建 service unit 配置文件:

    [Unit]
    Description=nick backup learn dir service
     
    [Service]
    User=nick
    Group=nick
    Type=simple
    ExecStart=/usr/local/bin/backupdir.sh
     
    [Install]
    WantedBy=multi-user.target

    把上面的 unit 配置保存到文件 /etc/systemd/system/nickbak.service。
    然后执行下面的命令测试服务的执行情况:

    $ sudo systemctl daemon-reload
    $ sudo systemctl start nickbak.service

    这样的备份任务只会在执行 sudo systemctl start nickbak.service 时执行一次。下面我们通过 timer unit 把它配置为定时执行。
    创建 timer unit 配置文件:

    [Unit]
    Description=nick backup learn dir timer
     
    [Timer]
    OnCalendar=*:/
    Persistent=true
    Unit=nickbak.service
     
    [Install]
    WantedBy=multi-user.target

    把上面的 unit 配置保存到文件 /etc/systemd/system/nickbak.timer。配置中 OnCalendar=*:0/15 表示每 15 分钟执行一次 nickbak.service 服务。

    执行下面的命令把 nickbak.timer 设置为开机启动,并启动 nickbak.timer:

    $ sudo systemctl daemon-reload
    $ sudo systemctl enable nickbak.timer
    $ sudo systemctl start nickbak.timer

    现在来看看 nickbak.timer 的状态:

    $ sudo systemctl status nickbak.timer

     (see: https://www.bbsmax.com/A/QV5ZLjB6zy/)

  • 相关阅读:
    element ui 时间控件 多个日期
    java 获取两个日期之间的所有日期(年月日)
    java 正则表达式(内附例子)
    Notepad++怎么使用正则替换
    基于 vue+element ui 的cdn网站(多页面,都是各种demo)
    使用github搭建个人html网站
    PL/SQL Developer 如何记住密码
    PL/SQL Developer图形化窗口创建数据库(表空间和用户)以及相关查询sql
    安装pl/sql developer(内附下载地址)
    vue中操作cookie的插件
  • 原文地址:https://www.cnblogs.com/yangjj08/p/12053318.html
Copyright © 2011-2022 走看看