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 {} }
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 {} }
参数如下 cronExpr := "0/5 * * * * *" # 每5秒执行 cronExpr := "0 */1 * * * *" # 每1分执行 cronExpr := "0 0 0/1 * * *" # 每1小时执行
Remark:你要设置第三位*,把前面的都设置成具体的数,否则还是按照每分钟 每秒,达不到你的每小时的效果
-----------------------------------------------------------------------------------------------------------------------------------------