package main

import (
"github.com/gorhill/cronexpr"
"fmt"
"time"
) func main(){
var(
expr *cronexpr.Expression
err error
now time.Time
nextTime time.Time
) //if expr,err = cronexpr.Parse("* * * * *");err != nil{
// fmt.Println(err)
// return
//}
//expr = expr if expr,err = cronexpr.Parse("* * * * *");err !=nil{
fmt.Println(err)
return
}
expr = expr now = time.Now()
nextTime = expr.Next(now)
fmt.Println(now,nextTime) time.AfterFunc(nextTime.Sub(now), func() {
fmt.Println("被调度了:",nextTime)
}) time.Sleep(*time.Second)
}
-- ::25.7892266 + CST m=+0.017000401 -- :: + CST
被调度了: -- :: + CST Process finished with exit code

调度多个cron任务

package main

import (
"github.com/gorhill/cronexpr"
"fmt"
"time"
)
//代表一个任务
type CronJob struct {
expr *cronexpr.Expression
nextTime time.Time//expr.Next(Now)
} func main(){
//需要有一个调度协程 它定时检查所有的cron任务 谁过期就执行谁
var(
expr *cronexpr.Expression
now time.Time
cronJob *CronJob
scheduleTable map[string]*CronJob //key:任务名字
) scheduleTable = make(map[string]*CronJob) now = time.Now() //1定义两个cronjob
expr = cronexpr.MustParse("*/5 * * * * * *")
cronJob = &CronJob{
expr:expr,
nextTime:expr.Next(now),
} scheduleTable["job1"] = cronJob expr = cronexpr.MustParse("*/5 * * * * * *")
cronJob = &CronJob{
expr:expr,
nextTime:expr.Next(now),
} scheduleTable["job2"] = cronJob go func() {
var(
jobName string
cronJob *CronJob
now time.Time
)
//定时检查一下任务调度表
for{
now = time.Now()
for jobName ,cronJob = range scheduleTable{
if cronJob.nextTime.Before(now) || cronJob.nextTime.Equal(now){
go func(jobName string) {
fmt.Println("执行:",jobName)
}(jobName)
cronJob.nextTime = cronJob.expr.Next(now)
fmt.Println("下次执行时间:",cronJob.nextTime)
}
} //睡眠100毫秒
select {
case <-time.NewTimer(*time.Millisecond).C://1将在100毫秒可读 返回 }
}
}() time.Sleep(time.Second*) }
下次执行时间: -- :: + CST
下次执行时间: -- :: + CST
执行: job2
执行: job1
下次执行时间: -- :: + CST
下次执行时间: -- :: + CST
执行: job2
执行: job1
下次执行时间: -- :: + CST
下次执行时间: -- :: + CST
执行: job1
执行: job2
下次执行时间: -- :: + CST
执行: job1
执行: job2
下次执行时间: -- :: + CST
下次执行时间: -- :: + CST
下次执行时间: -- :: + CST
执行: job1
执行: job2
下次执行时间: -- :: + CST
执行: job2
下次执行时间: -- :: + CST
执行: job1

cronexpr任务调度的更多相关文章

  1. .net 分布式架构之任务调度平台

    开源地址:http://git.oschina.net/chejiangyi/Dyd.BaseService.TaskManager .net 任务调度平台 用于.net dll,exe的任务的挂载, ...

  2. 免费开源的DotNet任务调度组件Quartz.NET(.NET组件介绍之五)

    很多的软件项目中都会使用到定时任务.定时轮询数据库同步,定时邮件通知等功能..NET Framework具有“内置”定时器功能,通过System.Timers.Timer类.在使用Timer类需要面对 ...

  3. Spring Quartz实现任务调度

    任务调度 在企业级应用中,经常会制定一些"计划任务",即在某个时间点做某件事情 核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作 任务调度涉及多线程并发.线程池维 ...

  4. Quartz实现任务调度

    一.任务调度概述 在企业级应用中,经常会制定一些"计划任务",即在某个时间点做某件事情,核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作,任务调度涉及多线程并发. ...

  5. 基于ASP.NET MVC(C#)和Quartz.Net组件实现的定时执行任务调度

    http://www.cnblogs.com/bobositlife/p/aspnet-mvc-csharp-quartz-net-timer-task-scheduler.html 在之前的文章&l ...

  6. Quartz任务调度基本使用

    转自:http://www.cnblogs.com/bingoidea/archive/2009/08/05/1539656.html 上一篇:定时器的实现.Java定时器Timer和Quartz介绍 ...

  7. 从零开始学 Java - Spring 使用 Quartz 任务调度定时器

    生活的味道 睁开眼看一看窗外的阳光,伸一个懒腰,拿起放在床一旁的水白开水,甜甜的味道,晃着尾巴东张西望的猫猫,在窗台上舞蹈.你向生活微笑,生活也向你微笑. 请你不要询问我的未来,这有些可笑.你问我你是 ...

  8. #研发中间件介绍#定时任务调度与管理JobCenter

    郑昀 最后更新于2014/11/11 关键词:定时任务.调度.监控报警.Job.crontab.Java 本文档适用人员:研发员工   没有JobCenter时我们要面对的:   电商业务链条很长,业 ...

  9. #数据技术选型#即席查询Shib+Presto,集群任务调度HUE+Oozie

    郑昀 创建于2014/10/30 最后更新于2014/10/31   一)选型:Shib+Presto 应用场景:即席查询(Ad-hoc Query) 1.1.即席查询的目标 使用者是产品/运营/销售 ...

随机推荐

  1. 转载:python操作excel表格(xlrd/xlwt)

    python操作excel表格(xlrd/xlwt)   最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异,而 ...

  2. Python学习day10-文件处理

    figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...

  3. 1、Zookeeper的功能以及工作原理

    1.ZooKeeper是什么? ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态根据节点提交 ...

  4. ValueError: Variable conv1/weights already exists.

    跑TensorFlow程序的过程中出现了错误,解决之后再次跑时,报如下错误: ValueError: Variable conv1/weights already exists, 原因: 这是因为我在 ...

  5. E: 无法获得锁 /var/lib/apt/lists/lock - open (11: 资源暂时不可用) E: 无法对目录 /var/lib/apt/lists/ 加锁 问题解决方法

    使用Ubuntu16.04安装软件执行apt-get update时出现如下错误: E: 无法获得锁 /var/lib/apt/lists/lock - open (11: 资源暂时不可用) E: 无 ...

  6. 通过media媒体查询设置ie7/8样式、使用media判断各机型、手淘flexible.js

    @media all and (min-width:1280px){ /* 所有设备宽度大于1280干嘛干嘛嘞... */ body{ background:#f00; } } @media (min ...

  7. 装配SpringBean(二)--XML方式介绍

    装配SpringBean,我理解的意思就在容器中定义一个bean,然后让容器通过某种方式找到它.因为在Spring中一切皆资源,资源就是所谓的bean,我们怎么才能从容器中获取这些资源呢?那就是控制反 ...

  8. WIX、Squarespace、WordPress 三者的优劣分别是什么?

    层出不穷的智能建站,模板建站,源码建站,云建站,仿站,各种建站概念都抛洒于红海之中.到底什么样的网站适合自己,什么样的网站值得我们去消费,什么样的网站能长久,是个非常值得思考的问题. 网站建设技术非常 ...

  9. DVWA 之medium级别sql注入

    中级注入的提交方式从get请求改为post请求,可以用burp抓包注入或抓注入点 1 .  判断是否有注入 sqlmap -u "http://192.168.242.1/dvw/vulne ...

  10. 023-linux(2)

    1. head 查看文件的前N行 -n ,表示查看前几行 head - test.txt 2. tail 查看文件的后N行 -n,表示查看文件的后几行 tail - test.txt -f(循环读取) ...