go定时任务crontab

news2024/9/21 21:55:33

在linux里可以通过crontab -e或者vi /etc/crontab编辑定时任务,区别在于后者只有root用户可以,还可以指定shell环境,不建议修改,修改前建议备份,前者任何用户都可以使用,两者修改后都不用修改自动重启。

1 linux crontab定时任务

# .---------------- 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

2 golang crontab定时任务

2.1 安装使用

2.1.1 安装

go get github.com/robfig/cron/v3@v3.0.0

2.1.2 导入

import "github.com/robfig/cron/v3"

 

2.2 时间规则

2.2.1 标准时间规则

# .------------------second (0 - 59)
# | .---------------- 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
# | | | | | |
# * * * * * * user-name command to be executed

package crontab
import "github.com/robfig/cron"

func CronExec() {
    spec := "*/2 * * * * ?" //每2s执行一次
    spec := "0 5 10 * * ?" //每天早上10:05:00执行一次
    spec := "* * 10 * * ?" //每天10点开始的一个小时一直在执行
    spec := "* 1-59/10 * * * ?" //每天1分到59分每10分钟执行一次

    c := cron.New()
    id,err := c.AddFunc(spec, func()) {
        crontab()
    }
    if err != nil {
        fmt.Sprintf("crontab exec error: %v with id: %v", err, id)
    }
    c.Start()
    return c

func crontab() {
    fmt.Sprint("crontab exec...")
}
package main 
import crontab

func main() {
    //执行任务代码
    xxx  
   
    go func() {
        CronExec()
    }()
}

2.2.2 预定义时间规则

为了方便使用,cron预定义了一些时间规则:

  • @yearly:也可以写作@annually,表示每年第一天的 0 点。等价于0 0 1 1 *;
  • @monthly:表示每月第一天的 0 点。等价于0 0 1 * *;
  • @weekly:表示每周第一天的 0 点,注意第一天为周日,即周六结束,周日开始的那个 0 点。等价于0 0 * * 0;
  • @daily:也可以写作@midnight,表示每天 0 点。等价于0 0 * * *;
  • @hourly:表示每小时的开始。等价于0 * * * *。
func main() {
  c := cron.New()

  c.AddFunc("@hourly", func() {
    fmt.Println("Every hour")
  })

  c.AddFunc("@daily", func() {
    fmt.Println("Every day on midnight")
  })

  c.AddFunc("@weekly", func() {
    fmt.Println("Every week")
  })

  c.Start()

  for {
    time.Sleep(time.Second)
  }
}

注意:这样使用一个 cron.New() 的定时任务,执行的每个方法是顺序执行的,也就是说并不是同一时刻开始执行。

2.2.3 固定时间间隔

cron支持固定时间间隔,格式为:

@every <duration>

含义为每隔duration触发一次。<duration>会调用time.ParseDuration()函数解析,所以ParseDuration支持的格式都可以。例如1h30m10s。

2.2.4 时区

默认情况下,所有时间都是基于当前时区的。当然我们也可以指定时区,有 2 两种方式:

在时间字符串前面添加一个CRON_TZ= + 具体时区,具体时区的格式在之前carbon的文章中有详细介绍。东京时区为Asia/Tokyo,纽约时区为America/New_York;
创建cron对象时增加一个时区选项cron.WithLocation(location),location为time.LoadLocation(zone)加载的时区对象,zone为具体的时区格式。或者调用已创建好的cron对象的SetLocation()方法设置时区。
 

func main() {
  nyc, _ := time.LoadLocation("America/New_York")
  c := cron.New(cron.WithLocation(nyc))
  c.AddFunc("0 6 * * ?", func() {
    fmt.Println("Every 6 o'clock at New York")
  })

  c.AddFunc("CRON_TZ=Asia/Tokyo 0 6 * * ?", func() {
    fmt.Println("Every 6 o'clock at Tokyo")
  })

  c.Start()

  for {
    time.Sleep(time.Second)
  }
}

2.3 常用方法

2.3.1 New()

会根据本地时间创建一个新(空白)的计划任务实例

// 创建一个默认的cron对象
cron.New()

// 自定义解析器
cron.New(cron.WithSeconds())

// Seconds field, optional
cron.New(cron.WithParser(cron.NewParser(
    cron.SecondOptional | cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow | cron.Descriptor,
)))

2.3.2 AddJob()

// 有两个参数,第一个参数可以是cron表达式或者预定义时间表,第二个Job
func (c *Cron) AddJob(spec string, cmd Job) (EntryID, error)
 
// Job是一个接口,有一个Run方法
type Job interface {
    Run()
}

2.3.3 AddFunc()

会向计划任务实例中添加一个回调函数,按指定时间表执行回调函数。

// 有两个参数,第一个参数可以是cron表达式或者预定义时间表,第二个传入一个函数,就是要执行的任务

// 会返回一个Id和error

// 会把传入的cmd func转成FuncJob。FuncJob实现了Job接口

func (c *Cron) AddFunc(spec string, cmd func()) (EntryID, error) {

    return c.AddJob(spec, FuncJob(cmd))

}

2.3.4 Start()

调用start方法开始执行任务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/697846.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

尚无忧宠物托运小程序app源码前景如何?

宠物托运市场调研分析 由于宠物托运在交通运输中并不是一个很大的类目&#xff0c;行业尚缺乏标准的流程规范与相关的监管机制&#xff0c;目前我国市面上常见的三方宠物托运公司多无正规手续&#xff0c;更有多数公司不具备相关运输资质。 如今&#xff0c;宠物经济不断崛起…

Linux:安装tomcat

注意&#xff1a;1.安装tomcat时最好用非root用户安装 2.可以选择新建一个用户&#xff0c;用户安装部署tomcat&#xff0c;本文将继续用fovace账户进行tomcat安装 一、前置条件 安装tomcat需要先安装jdk&#xff0c;所以先确定系统中是否已经有jdk&#xff0c;如下&#xff1a…

Minecraft-生成运行Spigot服务端

一、安装 先下载一个.jar的服务端核心&#xff0c;选择自己需要的版本 spigot核心下载 二、配置 下载完后&#xff0c;创建一个.bat批处理文件 内容填写如下&#xff0c;xxx.jar是你下载的核心名称 -Xms1G表示服务器所使用的最低运行内存为1G -Xmx1G表示服务器所使用的最高运行…

力扣 113. 路径总和 II

题目来源&#xff1a;https://leetcode.cn/problems/path-sum-ii/description/ C题解&#xff1a;采用递归法&#xff0c;前序遍历&#xff0c;遍历每个叶子节点&#xff0c;路径和满足条件则将该路径保存下来。 class Solution { public:void getlujing(TreeNode* node, int …

【MySQL】表中插入数据时,查询时,中文数据变成??

解决办法&#xff1a; 重新创建一个表&#xff08;users&#xff09; 将字符集那栏勾选上

[Windows] 电脑专属后花园 HideUL软件隐藏工具v1.0便携版

如下图所示:这一堆乱七八糟的东西,看起来又特难受…… 下载:https://download.csdn.net/download/mo3408/87961003 更有甚者,如果我们在电脑安装了一些比较特殊且不方便被别人看到的软件,也是一件麻烦事。 所以,今天我就给大家推荐一款可以隐藏电脑软件的小工具,仅需简…

【致敬未来的攻城狮计划】打卡4:检测按键

按键模块 后台轮询 按键也是一个比较简单的模块&#xff0c;主要是为了学习IO输入模式。 查看RA2E1电路图可见&#xff1a; 按键相关引脚是004引脚&#xff0c;默认上拉高电平&#xff0c;按下接地为低电平。 首先第一步还是设置对应引脚。类似上一期设置LED的方式&#xf…

【电磁泄密】网络杂谈(2)之电磁泄密及防护

涉及知识点 什么是电磁泄密&#xff0c;电磁泄密的渠道&#xff0c;电磁泄密该如何去防护&#xff0c;电磁泄密的防护标准。深入了解电磁泄密防护手段。 原创于&#xff1a;CSDN博主-《拄杖盲学轻声码》&#xff0c;更多内容可去其主页关注下哈&#xff0c;不胜感激 文章目录 …

内存分区.

内存模型分区&#xff1a; ****代码区&#xff1a;存放CPU执行的机器指令。通常代码区是可共享的(即另外的执行程序可以调用它)&#xff0c;使其可共享的目的是对于频繁被执行的程序&#xff0c;只需要在内存中有一份代码即可。代码区通常楚只读的&#xff0c;使其只读的原因是…

NXP i.MX 8M Plus工业开发板硬件说明书( 四核ARM Cortex-A53 + 单核ARM Cortex-M7,主频1.6GHz)

前 言 本文主要介绍创龙科技TLIMX8MP-EVM评估板硬件接口资源以及设计注意事项等内容。 创龙科技TLIMX8MP-EVM是一款基于NXP i.MX 8M Plus的四核ARM Cortex-A53 单核ARM Cortex-M7异构多核处理器设计的高性能工业评估板&#xff0c;由核心板和评估底板组成。ARM Cortex-A53(…

VR全景如何保存本地,一个按钮即可解决

导语&#xff1a; 对于许多用户来说&#xff0c;保存VR全景作品到本地常常是一项繁琐而费时的任务。然而&#xff0c;现在有了蛙色3DVR平台&#xff0c;一切变得简单轻松&#xff0c;让您享受到便捷的离线导出体验。 平台为用户提供了专业的离线导出功能&#xff0c;使您能够轻…

Seata-DTX|分布式事务金融场景案例介绍

文&#xff5c;魏陈豪&#xff08;花名&#xff1a;无陈 Sam) 蚂蚁集团 SOFAStack 产品专家 本文 2966 字 阅读 8 分钟 序言 今天给大家带来一篇 Seata-DTX[1] 商业版分布式事务在金融行业如何保证事务一致性的实践介绍。从一个全局视角出发看看一致性的保证、分别有哪些节点&a…

全志科技T3国产工业评估板规格书(四核ARM Cortex-A7,主频1.2GHz)

1 评估板简介 创龙科技TLT3-EVM是一款基于全志科技T3处理器设计的4核ARM Cortex-A7高性能低功耗国产评估板&#xff0c;每核主频高达1.2GHz&#xff0c;由核心板和评估底板组成。 评估板接口资源丰富&#xff0c;引出双路网口、双路CAN、双路USB、双路RS485等通信接口&#x…

3、Redis7 十大数据类型(二)

1.8 bitmap&#xff08;位图&#xff09;操作命令 SETBIT 设置 格式&#xff1a;setbit 参数1 参数2 参数3 参数1&#xff1a;bitmap名称 参数2&#xff1a;索引 参数3&#xff1a;值&#xff08; 1 | 0 &#xff09; 示例&#xff1a; 将bitmap1的第一个位置的值设为1 s…

常用的flex布局

文章目录 1. flex布局流式布局自动换行2. flex布局流式布局自动换行3. flex横向滚动4. flex 等分5. flex百分比布局6. flex圣杯布局 1. flex布局流式布局自动换行 <!-- 第一种方式: flex布局流式布局自动换行 每行显示3个 --> <div class"box"><div c…

Matlab 主成分分析法

主成分分析 本文将介绍主成分分析(PCA)&#xff0c;主成分分析是一种降维算法&#xff0c;它能将多个指标转换为少数几个主成分&#xff0c;这些主成分是原始变量的线性组合&#xff0c;且彼此之间互不相关&#xff0c;其能反映出原始数据的大部分信息。 一般来说&#xff0c;…

基于SpringBoot+vue的职称评审管理系统设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

钳式高频电流探头测量电流和提高灵敏度的方法

高频电流探头是一款可以同时测量直流和交流的高频电流探头。高频电流探头采用先进的磁电传感器&#xff0c;通过测试电流所产生的磁场信号实现对电流信号的准确测量&#xff0c;产品坚固耐用&#xff0c;能够大大减少了操作难度&#xff0c;提高测量的准确性。 为了测量数据准确…

Python笔记-1

Python安装问题 1.python是一门解释性的计算机程序语言。 2.IDLE就是我们写Python程序的地方&#xff08;小型的集成开发环境&#xff0c;编辑器&#xff09;。 3.Pycharm是一个大型的集成开发环境&#xff08;IDLE的扩展&#xff0c;不仅可以写&#xff0c;还能管理、调试&am…

树莓派安装DoraClient,连接DoraCloud云桌面

Raspberry Pi&#xff08;树莓派&#xff09; 是为学习计算机编程教育而设计的只有信用卡大小的微型电脑&#xff0c;自问世以来受众多计算机发烧友和创客的追捧&#xff0c;曾经一“派”难求。 DoraCloud是一款多平台的桌面虚拟化管理软件&#xff0c;支持Hyper-V、VMware、P…