首页 > 其他分享 >go语言之cron定时任务

go语言之cron定时任务

时间:2024-05-29 09:59:55浏览次数:15  
标签:cronExpr return fmt cron func go 定时 runtime

#### 版本一定选对

go get "github.com/robfig/cron/v3"

代码如下:

package main

import (
    "fmt"
    "github.com/robfig/cron/v3"
    "os"
    "runtime"
    "time"
)

// GetOS 返回当前操作系统的字符串表示
func GetOS() string {
    switch runtime.GOOS {
    case "windows":
        return "Windows"
    case "linux":
        return "Linux"
    case "darwin":
        return "Mac OS X (darwin)"
    default:
        return "Unknown OS: " + runtime.GOOS
    }
}

func main() {
    // 默认 cron 表达式
    cronExpr := "* * * * *"

    // 检查命令行参数
    if len(os.Args) > 1 {
        cronExpr = os.Args[1]
    }

    // 创建一个新的 cron 实例
    c := cron.New() // 使用带秒的解析器
    // 添加一个根据命令行参数或默认设置的任务
    _, err := c.AddFunc(cronExpr, func() {
        now := time.Now()

        // 定义时间格式(Go的布局参考时间是 Mon Jan 2 15:04:05 MST 2006)
        const layout = "2006-01-02 15:04:05"

        // 使用Format方法将当前时间格式化为指定的字符串表示
        formattedTime := now.Format(layout)
        fmt.Printf("%s %s Start job....\n", GetOS(), formattedTime)
    })
    if err != nil {
        fmt.Printf("Error scheduling job: %v\n", err)
        return
    }

    // 启动 cron 调度器
    c.Start()

    // 阻塞主线程,使程序持续运行
    select {}
}
View Code

windows效果如下:

 LInux效果如下:

 

注意:v3版本win和linux无区别,其他版本问题很大
参数如下(* * * * *)<----------->(分钟 小时 * * *)

# 如果想支持秒呢?

代码如下:参数急需要6位了

package main

import (
    "fmt"
    "github.com/robfig/cron/v3"
    "os"
    "runtime"
    "time"
)

// GetOS 返回当前操作系统的字符串表示
func GetOS() string {
    switch runtime.GOOS {
    case "windows":
        return "Windows"
    case "linux":
        return "Linux"
    case "darwin":
        return "Mac OS X (darwin)"
    default:
        return "Unknown OS: " + runtime.GOOS
    }
}

func main() {
    // 默认 cron 表达式
    cronExpr := "* * * * * *"

    // 检查命令行参数
    if len(os.Args) > 1 {
        cronExpr = os.Args[1]
    }

    // 创建一个新的 cron 实例
    c := cron.New(cron.WithSeconds()) // 使用带秒的解析器
    // 添加一个根据命令行参数或默认设置的任务
    _, err := c.AddFunc(cronExpr, func() {
        now := time.Now()

        // 定义时间格式(Go的布局参考时间是 Mon Jan 2 15:04:05 MST 2006)
        const layout = "2006-01-02 15:04:05"

        // 使用Format方法将当前时间格式化为指定的字符串表示
        formattedTime := now.Format(layout)
        fmt.Printf("%s %s Start job....\n", GetOS(), formattedTime)
    })
    if err != nil {
        fmt.Printf("Error scheduling job: %v\n", err)
        return
    }

    // 启动 cron 调度器
    c.Start()

    // 阻塞主线程,使程序持续运行
    select {}
}
View Code
参数如下
cronExpr := "0/5 * * * * *" # 每5秒执行
cronExpr := "0 */1 * * * *" # 每1分执行
cronExpr := "0 0 0/1 * * *" # 每1小时执行

 

标签:cronExpr,return,fmt,cron,func,go,定时,runtime
From: https://www.cnblogs.com/wusenwusen/p/18219579

相关文章

  • Lesson 3 An unknown goddess 无名女神
    Howdidthearchaeologistsknowthatthestatuewasagoddess?1.原文Sometimeago,aninterestingdiscoverywasmadebyarchaeologistsontheAegeanislandofKea.AnAmericanteamexploredatemplewhichstandsinanancientcityonthepromontoryo......
  • MongoDB CRUD操作:投影Project详解
    MongoDBCRUD操作:投影Project详解文章目录MongoDBCRUD操作:投影Project详解返回文档的全部字段返回指定的字段和_id字段不输出_id字段指定排除的字段返回内嵌文档中的指定字段禁止内嵌文档中的特定字段数组中内嵌文档的投影聚合表达式的投影字段默认情况下,MongoDB查......
  • Django学习-虚拟环境创建、URL组成部分详解
    一、创建一个Django的虚拟环境 生成虚拟环境在D:\Virtualenvs下 在pycharm中引入django虚拟环境 二、URL详解 URL,统一资源定位符,一个URL由以下几部分组成:scheme://host:port/path/?query-string=xxx#anchorscheme:代表的是访问的协议,一般为http或者https以及ftp等h......
  • MongoDb简介
    MongoDb入门MongoDB不是关系数据库,而是面向文档(document-oriented)的数据库。MongoDB的设计采用了横向扩展。面向文档的数据模型使跨多台服务器拆分数据更加容易。MongoDB会自动平衡跨集群的数据和负载,自动重新分配文档,并将读写操作路由到正确的机器上文档文档是MongoDB......
  • go net/http send req
      之前写到net/http客户端发送http请求时,会开启HTTP事务发送HTTP请求并等待远程的响应,经过下面一连串的调用,我们最终来到了标准库实现底层HTTP协议的结构体— net/http.Transport:net/http.Client.Donet/http.Client.donet/http.Client.sendnet/http.sendnet/htt......
  • crontab 设置定时任务
    crontab设置定时任务crontab 是Unix和类Unix系统(如Linux)上用于设置定时任务的工具。通过 crontab,你可以定期执行特定的命令或脚本。下面是如何使用 crontab 设置定时任务的步骤:打开crontab编辑器在终端中输入以下命令:crontab -e如果你是第一次使用 cron......
  • II. 在 Google Colab 上运行 NeRF
    在GoogleColab上运行NeRF算法。一、运行官方数据集直接跟着NeRF(NeuralRadianceFields)tutorialusinggooglecolab这个视频操作即可,顺便验证一下CoLab作为以后深度学习环境的可行性。二、训练自己的数据博主是以SilicaGGO,他自己拍摄的二次元玩偶。工程链接:k......
  • Docker安装MongoDB
    拉取mongo镜像dockerpullmongo:4.4创建mongo数据持久化目录mkdir-p/docker_volume/mongodb/data运行容器dockerrun-itd--namemongo-v/docker_volume/mongodb/data:/data/db-p27017:27017mongo:4.4--auth.创建用户登录mongo容器,并进入到【admin】数据库dockerexec-......
  • 两个 goroutine 交替打印 1-100
    两个goroutine交替打印1-100channel操作//两个Goroutine交替打印1到100funcmain(){ ch1,ch2:=make(chanint),make(chanint) done:=make(chanint) gofunc(){ forx:=rangech1{ println("ch1:",x) ch2<-x+1 } }() gofunc(......
  • 题解/算法 {C. Goose Goose Duck}
    题解/算法{C.GooseGooseDuck}@LINK:https://codeforces.com/gym/105184;令A[N]表示这N个人的区间;比如答案是[a,b,c,d]那么他一定满足:A[a].lef<=0<=A[a].rig,A[b].lef<=1<=A[b].rig,A[c].lef<=2<=A[c].rig,…贪心;对于最开头的人来说,令集合S:......