go语言之cron定时任务

#### 版本一定选对

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小时执行

 

Remark:你要设置第三位*,把前面的都设置成具体的数,否则还是按照每分钟 每秒,达不到你的每小时的效果

posted @ 2024-05-29 09:57    阅读(9)  评论(0编辑  收藏  举报