美文网首页
robfig/cron

robfig/cron

作者: JunChow520 | 来源:发表于2021-12-27 03:31 被阅读0次

    cron

    Linux中使用内置cron计划任务服务,按照约定的时间定时执行特定的任务(job)。cron服务启动后会读取配置文件/etc/crontabcron服务根据命令和执行时间按时来调用工作任务。

    cron服务操作命令

    # 启动计划任务服务
    $ service crond start
    
    # 关闭计划任务服务
    $ service crond stop
    
    # 重启计划任务服务
    $ service crond restart
    
    # 重载计划任务配置
    $ service crond reload
    

    cron服务提供了crontab命令来设置计划任务

    $ crontab [-u user] [-e] [-l] [-r]
    
    参数 描述
    crontab -u user 用于设定用户的定时服务,Linux中每个用户对应着一份crontab任务清单。
    crontab -e 编辑用户的crontab文件内容来设置定时任务
    crontab -l 显示用户的crontab文件内容
    crontab -r 从/var/spool/cron目录中删除用户的crontab文件
    crontab -i 在删除用户crontab时给出确认提示

    crontab命令可固定的间隔时间执行指定的系统指令或shell script脚本,时间间隔的单位是分钟、小时、日、月、周即以上的任意组合。

    $ crontab -e
    

    当使用crontab命令编辑完用户的计划任务后,cron服务自动会在/var/spool/cron文件夹下生成一个与此用户同名的文件,该文件记录对应用户的计划任务信息,此文件是禁止直接编辑的,只能通过crontab -e命令来编辑。cron服务启动后每过1分钟会读取用户配置的计划任务文件,检查是否需要执行里面的命令,因此修改后无需重启cron服务。

    cron表达式基础语法 - 定时任务时间规则

    • cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每个域代表一个含义。
    minute hour day month week command
    
    时间 名称 取值范围 描述
    minute 分钟 0~59 整数
    hour 小时 0~23 整数
    day 日期 1~31 一个月中的某一天
    month 月份 1~12 整数
    week 星期几 0~7 0或7表示星期日
    command 命令 - -
    # .---------------- minute (0 - 59)
    # | .------------- hour (0 - 23)
    # | | .---------- day of month (1 - 31)
    # | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
    # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
    # | | | | |
    # * * * * * user-name command to be executed
    

    每个域都可以使用数字,但也可以使用下列特殊字符。

    特殊字符 名称 描述
    * 星号 匹配所有可能的值
    , 逗号 枚举值,使用逗号分隔指定的列表任务。
    - 中杠 范围,整数之间使用中杠表示一个整数范围。
    / 正斜线 增长间隔,指定时间的间隔频率
    ? 问号 仅用于日和星期,可代替*星号。

    例如:

    表达式 分钟 小时 日期 月份 星期 描述
    0 6 * * * cmd 0 6 * * * 每天早上6:00点执行一次任务
    0 */2 * * * cmd 0 */2 * * * 每间隔2小时执行一次任务
    */5 * * * * cmd */5 * * * * 每隔5分钟执行一次任务

    robfig/cron

    robfig/cron包是Go的定时任务框架,实现了cron计划任务规范的解析器和任务运行器。不同之处在于robfig/cron不仅兼容了Linux标准的Crontab格式,而且扩展到秒级。

    下载安装包

    $ go get -u -v github.com/robfig/cron/v3
    

    例如:

    //创建任务调度器实例
    c := cron.New()
    //注册任务到调度器,注册的任务都是异步执行的。
    c.AddFunc("0 30 * * * *", func() {
        fmt.Println("every hour on the half hour run...")
    })
    c.AddFunc("@hourly", func() {
        fmt.Println("every hour run...")
    })
    //启动计划任务
    c.Start()
    

    cron.New

    • cron.New()会根据本地时间创建一个全新且空白的计划任务实例
    func New(opts ...Option) *Cron
    

    cron.AddFunc

    • cron.AddFunc()会向计划任务实例中添加一个回调函数,按指定时间表执行回调函数。
    • cron.AddFunc()用来注册任务到调度器中,当任务要执行时会使用goroutines调用,这样每个任务都不会发生阻塞。
    • 调度器中的任务都会以异步的方式来执行
    func (c *Cron) AddFunc(spec string, cmd func()) (EntryID, error) 
    

    相关文章

      网友评论

          本文标题:robfig/cron

          本文链接:https://www.haomeiwen.com/subject/uqvmkltx.html