zoukankan      html  css  js  c++  java
  • 如何创建systemd定时任务

    1. 如何创建一个定时任务,通过systemd系统

    Linux中,可以使用crontab创建一个定时任务。

    首先,创建一个crontab文件,形如

    # 每天的6点42分,运行一次spmake脚本
    42 6 * * * /home/luzj/bin/spmake
    

    紧接着,执行crontab file即可安装该文件。之后定时任务即开起

    使用crontab -l列出所有在crontab管理下的定时任务,crontab -r xxx删除定时任务

    1.1. systemd中的timer

    systemd通过定义一个timer单元来创建一个定时任务。实际上我们需要做两件事,首先定义一个service单元,
    这个service单元定义了我们想定时执行的任务。然后再定义一个timer单元,通过timer单元定义如何定时执行
    之前的service单元,比如每1h执行一次、每天5点执行、每个月的16号6点执行等等

    1.2. 自定义定时任务

    我们自定义一个定时任务——每过30s就向msg.txt输入当前时间

    1.2.1. 具体步骤

    首先,创建一个mail.sh脚本.

    vim mail.sh
    
    # 内容
    #!/bin/bash
    echo `date` >> msg.txt
    
    #添加执行权限
    chmod +x mail.sh
    

    我们先执行一遍,bash mail.sh,就会看到当前时间被写入msg.txt之中了

    创建Service单元.进入/etc/systemd/system目录中,创建mytimer.service文件,

    vim mytimer.service
    
    #写入内容
    [Unit]
    Description=mytimer service
    
    [Service]
    ExecStart=/bin/bash <path>/mail.sh
    
    # 这里可以不添加[Install]区块,因为该Service是为Timer单元服务的
    

    之后,启动Service单元,systemctl start mytimer.service.然后就会看到,当前时间
    被写入到msg.txt之中了

    创建Timer单元.同样的目录,创建mytimer.timer文件,

    vim mytimer.timer
    
    #内容如下
    [Unit]
    Description=run mail.sh every 10s
    
    [Timer]
    OnUnitActiveSec=10s
    Unit=mytimer.service
    
    [Install]
    WantedBy=multi-user.target
    

    启动Timer单元.

    systemctl daemon.reload
    systemctl enable mytimer.timer
    systemctl start mytimer.timer
    
    #查看timer运行状态
    systemctl status mytimer.timer
    tail -f msg.txt # 查看打印情况,每10s会打印一次,我的实测 时间间隔不是很精确哈
    journalctl -f -u mytimer.timer # 查看定时器运行日志
    

    1.2.2. [Timer]区块属性详情

    OnActiveSec:定时器生效后,多少时间开始执行任务
    OnBootSec:系统启动后,多少时间开始执行任务
    OnStartupSec:Systemd 进程启动后,多少时间开始执行任务
    OnUnitActiveSec:该单元上次执行后,等多少时间再次执行
    OnUnitInactiveSec: 定时器上次关闭后多少时间,再次执行
    OnCalendar:基于绝对时间,而不是相对时间执行
    AccuracySec:如果因为各种原因,任务必须推迟执行,推迟的最大秒数,默认是60秒
    Unit:真正要执行的任务,默认是同名的带有.service后缀的单元
    Persistent:如果设置了该字段,即使定时器到时没有启动,也会自动执行相应的单元
    WakeSystem:如果系统休眠,是否自动唤醒系统
    

    具体可以看官方文档

    1.3. 删除定时器

    systemctl disable mytimer.timer #关闭开机启动(即删除目录链接)
    systemctl stop mytimer.timer # 关闭单元
    systemctl stop mytimer.service
    
    #之后删除timer 和Service文件
    
    systemctl daemon-reload # 重新加载配置
    

    参考

    Systemd 定时器教程-阮一峰

  • 相关阅读:
    phpspider爬虫框架的使用
    【php设计模式】责任链模式
    【php设计模式】策略模式
    【php设计模式】观察者模式
    【php设计模式】模板模式
    【温故知新】php 魔术方法
    【php设计模式】享元模式
    Java50道经典习题-程序18 乒乓球赛
    Java50道经典习题-程序19 输入行数打印菱形图案
    Java50道经典习题-程序20 求前20项之和
  • 原文地址:https://www.cnblogs.com/Franken-Fran/p/timer_make.html
Copyright © 2011-2022 走看看