zoukankan      html  css  js  c++  java
  • ubuntu crontab 在时间段内随机执行一次

    crontab 在linux下做定时任务的命令,

    1. 基本格式

    * * * * * cmd

    第一个表示:分钟 1-59, 每分钟用 */1

    第二个表示:小时 023

    第三个表示:日期1-31

    第四个表示:月份1-12

    第五个表示:星期几0-6(0表示星期日)

    几个说明例子

    */1 * * * * /path/xx.sh  每分钟执行一次脚本

    0 3 * * 5-6 /path/xx.sh 每周五,周六早上3点执行一次脚本

    可以使用在线的工具来模拟测试写的crontab任务 

    2. crontab 命令

    NAME
         crontab -- maintain crontab files for individual users (V3)
     
    SYNOPSIS
         crontab [-u user] file
         crontab [-u user] { -l | -r | -e }

    基本用法:

    crontab -h 查看帮助

    crontab -l 查看当前定时任务列表

    crontab -r 删除当前用户下的定时任务

    crontab -e 进入编辑模式添加定时任务

    crontab file 添加指定配置文件到定时任务(上面使用-e命令,会在/var/spool/cron/crontabs/user 下生成当前用户名的文件)

    可以此命令预先脚本生成配置文件然后添加到定时任务;

    示例,测试使用的ubuntu server 14

    echo "0 3 * * 1-5 /path/xx.sh" >/var/spool/cron/crontabs/user
    chmod 777 /var/spool/cron/crontabs/user
    crontab /var/spool/cron/crontabs/user
    service crontab restart

    3. 关于定时任务在某一个时间段随机执行一次

    crontab 只能设定定时任务,不能直接设定随机(有知道直接的留言告诉我)

    于是想到了一个 shell脚本随机,然后生成一个随机数,把这个随机数设定在定时任务的时间上,这样每次执行一次,随机一次时间,并重新设定定时任务;任务执行完成删除当前任务,随机一数,并重新配置任务

    这样就达到了在某一个时间段随执行一次任务的想法。

    如下脚本逻辑

    #!/bin/bash
    
    #随机数,表示随机一个30以内的数
    randNum=$(($RANDOM%30))
    
    #user 表示当前登陆的用户
    #path /var/spool/cron/crontabs
    #生成crontab 任务配置文件
    #表示在 每周一到周五早上3点到3点30之间,随机一个时间执行一次数据备份
    echo $[randNum]" 3 * * 1-5 /path/backdb.sh" > /path/user
    
    #设置可执行权限
    sudo chmod 777 /path/user
    #使用crontab 命令添加到定时任务
    sudo crontab /path/user
    #重启服务
    sudo service cron restart
    

      

    参考:http://www.jb51.net/LINUXjishu/151805.html

  • 相关阅读:
    MySQL-基础知识整理
    设计模式-适配器模式
    MySQL
    MySQL-5.7 填坑
    MySQL
    Oracle
    SQL 注入
    Apache JMeter
    AppScan
    DNS 搜索
  • 原文地址:https://www.cnblogs.com/cocoajin/p/6676065.html
Copyright © 2011-2022 走看看