golang的定时任务
golang的定时任务使用的是cron这个包来解决的
官方文档地址:https://godoc.org/github.com/robfig/cron
cron包的基础知识
| 字段名 | 是否必须 | 允许的值 | 允许的特定字符 |
|---|---|---|---|
| 秒(Seconds) | 是 | 0-59 | * / , - |
| 分(Minutes) | 是 | 0-59 | * / , - |
| 时(Hours) | 是 | 0-23 | * / , - |
| 日(Day of month) | 是 | 1-31 | * / , – ? |
| 月(Month) | 是 | 1-12 | * / , - |
| 星期(Day of week) | 否 | 0-6 or SUM-SAT | * / , – ? |
注:
- 月(Month)和星期(Day of week)字段的值不区分大小写,如:SUN、Sun 和 sun 是一样的。
- 星期 (Day of week)字段如果没提供,相当于是 *
特殊字符说明
星号(*) 表示 cron 表达式能匹配该字段的所有值。如在第5个字段使用星号(month),表示每个月
斜线(/) 表示增长间隔,如第1个字段(minutes) 值是 3-59/15,表示每小时的第3分钟开始执行一次,之后每隔 15 分钟执行一次(即 3、18、33、48 这些时间点执行),这里也可以表示为:3/15
逗号(,) 用于枚举值,如第6个字段值是 MON,WED,FRI,表示 星期一、三、五 执行
连字号(-) 表示一个范围,如第3个字段的值为 9-17 表示 9am 到 5pm 直接每个小时(包括9和17)
问号(?) 只用于日(Day of month)和星期(Day of week),\表示不指定值,可以用于代替 *
cron举例说明
每隔5秒执行一次:*/5 * * * * ?
每隔1分钟执行一次:0 */1 * * * ?
每天23点执行一次:0 0 23 * * ?
每天凌晨1点执行一次:0 0 1 * * ?
每月1号凌晨1点执行一次:0 0 1 1 * ?
在26分、29分、33分执行一次:0 26,29,33 * * * ?
每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?
实例代码:
package main import (
"github.com/robfig/cron"
"log"
) func main() {
i :=
c := cron.New()
spec := "*/5 * * * * ?"
c.AddFunc(spec, func() {
i++
log.Println("cron running :", i)
})
c.Start()
select { }
}
这里的select是相当于死循环的意义,如果不写,程序会立刻退出,写for死循环也是可以的
多任务
package main import (
"fmt"
"github.com/robfig/cron"
"log"
) type TestJob struct {
} func (this TestJob) Run() {
fmt.Println("testJob1")
} type Test2Job struct {
} func (this Test2Job) Run() {
fmt.Println("testJob2")
} func main() {
i :=
c := cron.New() spec := "*/5 * * * * ?" c.AddFunc(spec, func() {
i++
log.Println("cron running :", i)
})
c.AddJob(spec, TestJob{})
c.AddJob(spec, Test2Job{}) c.Start() defer c.Stop() select { }
}
golang的定时任务的更多相关文章
- golang 实现定时任务
在实际开发过程中,我们有时候需要编写一些定时任务.当然我们可以使用crontab命令实现我们的需求.但是这种方法不满足一些定制化场景,同时会依赖具体的操作系统环境. 定时任务 在golang中我们可以 ...
- golang cronexpr定时任务包使用
包获取 go get -u github.com/gorhill/cronexpr 创建一个定时任务 expr, err = cron.Parse("* * * * *"); 获得 ...
- Golang cron 定时任务使用
1.cron 表达式的基本格式 用过 linux 的应该对 cron 有所了解.linux 中可以通过 crontab -e 来配置定时任务.不过,linux 中的 cron 只能精确到分钟.而我们这 ...
- Golang——Cron 定时任务
开门见山写一个 package main import ( "fmt" "github.com/robfig/cron" "log" &qu ...
- cron表达式的双重人格:星期和数字到底如何对应?
写在前面 cron在希腊语中是时间的意思,而cron表达式(cron expression)则是遵循特定规则,用于描述定时设置的字符串,常用于执行定时任务.本文总结了不同环境(如平台.库等)下,cro ...
- Golang 入门系列(八) cron定时任务
1.cron 表达式的基本格式 Go 实现的cron 表达式的基本语法跟linux 中的 crontab基本是类似的.cron(计划任务),就是按照约定的时间,定时的执行特定的任务(job).cro ...
- Golang定时任务简单实现
下载cron包: go get github.com/robfig/cron 开启一个定时: 根据cron表达式进行时间调度,cron可以精确到秒,大部分表达式格式也是从秒开始. c := cron. ...
- Go 定时任务
本文基于Golang Crontab 实现了一个Crontab Job Manager.更加容易使用,同时也能够满足更加复杂的场景. 仓储地址, 如果有用,欢迎点赞,欢迎讨论,欢迎找茬. 需求 在开发 ...
- Golang mysql 上线的一个坑 Db.close重要性
急冲冲完成的mysql的一个监控自动处理程序上线了,线下处理是正常的,没想到线上才半小时就奔溃了. 现在时间是晚上11点,心慌焦虑涌上心头,需要熬夜?肾上腺素激增. 程序主要是一个定时任务的处理程序, ...
随机推荐
- java ee期末项目相关
1.项目简介 本项目是对纸杯生产进行管理的的一个系统,从前端接收到订单,然后根据订单内容进行纸杯的生产.如下为该系统的总流程图: 1.项目系统架构图 3.系统用例图 4.ER图 主要的代码和相关文件见 ...
- react-native绑定优酷SDK-附效果图和源码
ReactNative绑定优酷SDK需要用到两部分知识: 优酷本身的sdk绑定: RN与原生界面的交互: 效果: RN版本:0.49.3 代码更新日期:2017.10.26 下文也根据绑定需要分为两部 ...
- 金山wps面经
前言: 金山wps笔试是好久之前的了,忘记具体几号了.当时在华师参加的宣讲会,然后线下笔试通过了, 昨天(4月2号通知现场面试).今天是在华工酒店进行面试的,一二面一起进行的 一面: 1: 自我介绍 ...
- JAVA对Excel的导入导出
今天需要对比2个excel表的内容找出相同:由于要学的还很多上手很慢所以在这做个分享希望对初学的有帮助: 先是pom的配置: <dependency> <groupId>org ...
- 【Spring】20、使用TransactionSynchronizationManager在spring事务提交之后进行一些操作。
本文内容 如何在spring事务提交之后进行一些操作,这些操作必须得在该事务成功提交后才执行,回滚则不执行. 要点 如何在spring事务提交之后操作 如何在spring事务回滚之后操作 实现方案 使 ...
- Matlab function lorenzgui
function lorenzgui %LORENZGUI Plot the orbit around the Lorenz chaotic attractor. % This function an ...
- js实现的玫瑰花
<html> <head> <meta charset="utf-8"> <title>开心快乐每一天</title> ...
- PHP 在WIN10 下配置
apache: https://www.apachehaus.com/ php: https://windows.php.net/ https://windows.php.net/ 集成安装配置版:h ...
- UED与UCD
UED User Experience Design(用户体验设计),简称UED.UED是以用户为中心的一种设计手段,以用户需求为目标而进行的设计.设计过程注重以用户为中心,用户体验的概念从开发的最早 ...
- 前端打包文件在 nginx 上 403 的解决办法
遇到的问题表现出来就是如题所述,因此作为题目. 我们知道,前端有很多方便的构建和打包工具,如 webpack 等,通常我们会把前端文件打包到dist目录下,部署到服务器上,如 nginx 等. 这次遇 ...