前言

linux自带的crontab默认情况下只能精确到分钟,没法执行秒级任务。当然,也不是不行,比如:

* * * * * for i in $(seq 1 11);do echo hello >> /home/heruos/tmp.txt;sleep 5;done

看起来low了点,但也不是不能用。本文推荐go的一个第三方模块——gocron,配置定时任务也相当简单。

  • 安装
go get -u github.com/go-co-op/gocron

基础使用示例

package main

import (
"fmt"
"time"
"github.com/go-co-op/gocron"
) func cron1() {
fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
} func main() {
timezone,_ := time.LoadLocation("Asia/Shanghai")
s := gocron.NewScheduler(timezone) // 每3秒执行一次
s.Every(3).Seconds().Do(cron1) s.StartBlocking()
}

定时示例

// 每5秒执行一次
s.Every(5).Seconds().Do(func(){ ... }) // 每5天执行
s.Every(5).Days().Do(func(){ ... }) // 解析字符串。每5秒执行
s.Every("5s").Do(cron2) // 每月1号、2号和3号的10:00执行一次
s.Every(1).Month(1,2,3).At("10:00").Do(func(){ ... }) // 每天10:30执行一次
s.Every(1).Day().At("10:30").Do(func(){ ... }) // 每天10:30和08:00执行一次
s.Every(1).Day().At("10:30;08:00").Do(func(){ ... }) // 解析crontab表达式,每分钟执行一次
s.Cron("* * * * *").Do(func(){ ... })

启动方式

启动scheduler有两种方式:

  • s.StartAsync():异步调用,适合集成到其它系统。
  • s.StartBlocking():阻塞调用,适合单纯的定时任务场景。

参考

[golang]使用gocron编写定时任务的更多相关文章

  1. Mysql编写定时任务事件

    原文:Mysql编写定时任务事件 场景: 例如:某系统,用户每天只能拥有一次的抽奖机会,抽过后当天就不可再抽,但是过了24:00点后用户就重新拥有一次抽奖机会.像这种需要数据库定时对某个字段进行更新操 ...

  2. node编写定时任务,for循环只执行一遍的解决办法

    在用node编写定时任务时候,发现for循环只执行i=0这一次,就不接着循环执行了,下面贴上代码: exports.task = async function(ctx){ let { app } = ...

  3. 用navcat编写定时任务调用存储过程

    最近项目需要改动比较大,数据库结构也有所改变,这时就需要转移旧数据到新库中 第一时间想到的是用代码操作,由于两个库表结构不同,实体什么的得需要重新生成 并编写转移代码,这将是很大的工作量: 然后就想着 ...

  4. Golang 挑战:编写函数 walk(x interface{}, fn func(string)),参数为结构体 x,并对 x 中的所有字符串字段调用 fn 函数。难度级别:递归。

    golang 挑战:编写函数 walk(x interface{}, fn func(string)),参数为结构体 x,并对 x 中的所有字符串字段调用 fn 函数.难度级别:递归. 为此,我们需要 ...

  5. golang面试-代码编写题1-14

    目录 1.代码编写题--统计文本行数-bufio 2.代码编写题--多协程收集错误信息-channel 3.代码编写题--超时控制,内存泄露 4.代码编写题--单例模式 5.代码编写题--九九乘法表 ...

  6. 用Golang为Python编写模块

    Go里面需要显示的引入C模块, 让编译器支持生成动态链接库, 并且在代码中可以使用C语言的数据类型,这个至关重要. Calling Go code from Python code 摘取一个最简单例子 ...

  7. ssh中使用spring的集成quartz 编写定时任务

    之前没有使用框架开发时对于开发定时任务都是 使用java的原声timer类,重写线程的run方法跑要执行的任务.刚刚换的新公司,项目使用ssh2,目前该项目中的定时任务的使用spirng集成的quar ...

  8. linux 编写定时任务,查询服务是否挂掉

    shell 脚本 #!/bin/bash a=`netstat -unltp|grep fdfs|wc -l` echo "$a" if [ "$a" -ne ...

  9. golang为LigerUI编写简易版本web服务器

    package main import ( "io/ioutil" "log" "net/http" "os" ) va ...

  10. Golang 入门系列(八) cron定时任务

    1.cron 表达式的基本格式  Go 实现的cron 表达式的基本语法跟linux 中的 crontab基本是类似的.cron(计划任务),就是按照约定的时间,定时的执行特定的任务(job).cro ...

随机推荐

  1. 音视频八股文(12)-- ffmpeg 音频重采样

    1重采样 1.1 什么是重采样 所谓的重采样,就是改变⾳频的采样率.sample format.声道数等参数,使之按照我们期望的参数输出. 1.2 为什么要重采样 为什么要重采样?当然是原有的⾳频参数 ...

  2. 文心一言 VS chatgpt (5)-- 算法导论2.2 3~4题

    三.再次考虑线性查找问题(参见练习 2.1-3).假定要查找的元素等可能地为数组中的任意元素,平均需要检查输入序列的多少元素?最坏情况又如何呢?用0记号给出线性查找的平均情况和最坏情况运行时间.证明你 ...

  3. 2022-11-16:给你一个数组 nums,我们可以将它按一个非负整数 k 进行轮调, 例如,数组为 nums = [2,4,1,3,0], 我们按 k = 2 进行轮调后,它将变成 [1,3,0,

    2022-11-16:给你一个数组 nums,我们可以将它按一个非负整数 k 进行轮调, 例如,数组为 nums = [2,4,1,3,0], 我们按 k = 2 进行轮调后,它将变成 [1,3,0, ...

  4. nodejs 入门基本操作

    操作fs模块 const path = require("path"); const fs = require("fs"); /* 相对路径是命令窗口执行的目录 ...

  5. ES5 apply与call详解

    虽然es6已经出台了很多简单的方法替代了apply和call,但是还是有很多老大项目使用到了es5的这些方法,所以对于这些方法的掌握是有必要的 先回顾一下官方对apply.call的诠释 apply方 ...

  6. [ 基于宝塔部署 ] 恋爱博客 -- Like_Girl 5.0

    1)环境准备 云服务器 [ CentOS 7 ] 域名解析 love.daxiaoba.cool 宝塔面板 yum install -y wget && wget -O install ...

  7. IntelliJ IDEA 的初次使用--/护头

    IntelliJ IDEA 的使用 使用前先完成以下两点 环境配置 Win10环境配置(二) --Java篇 软件安装 IntelliJ IDEA 的安装 在完成软件安装,打开软件的瞬间,我是懵逼的. ...

  8. SQL Server 日志传输还原作业执行缓慢

    目录 情景 故障定位 VLF 对 Restore 的影响 问题 解决方案 方案1 方案 2 参考资料 情景 IP 角色 192.168.1.61 Primary 192.168.1.59 Second ...

  9. 基于瑞芯微camera文章汇总pdf分享给大家

    前面一段时间基于瑞芯微3568平台编写了camera系列文章, 一共12篇,目前更新完毕. <瑞芯微文章合集> camera系列文章编写前后一共花费2个月时间, 期间查阅了很多资料,做了很 ...

  10. 【技术积累】Mysql中的SQL语言【技术篇】【二】

    什么是多表查询?如何在MySQL中进行多表查询? 多表查询就是在一个查询中涉及到多个表,通过特定的关联方式连接多个表,并根据条件从中查询出所需要的数据. 多表查询是关系型数据库中最为基础的应用之一. ...