成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

go任務調度2(linux的cron調用)

cron格式:
分 時 日 月 周

蓮花網(wǎng)站建設公司成都創(chuàng)新互聯(lián),蓮花網(wǎng)站設計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為蓮花數(shù)千家提供企業(yè)網(wǎng)站建設服務。企業(yè)網(wǎng)站搭建\外貿網(wǎng)站制作要多少錢,請找那個售后服務好的蓮花做網(wǎng)站的公司定做!

每隔5分鐘執(zhí)行1次: /5 * echo hello > /tmp/x.log

每隔1-5分鐘執(zhí)行1次: 1-5 echo hello > /tmp/x.log

每天10點整、22點整執(zhí)行1次: 0 10,22 * echo hello > /tmp/x.log

每隔1-5分鐘執(zhí)行1次: 1-5 echo hello > /tmp/x.log


Parse():解析與校驗Cron表達式
Next():根據(jù)當前時間,計算下次調度時間

package main

import (
    "fmt"
    "github.com/gorhill/cronexpr"
    "time"
)

func main()  {
    var (
        expr *cronexpr.Expression
        err error
        now time.Time
        nextTime time.Time
    )

    //每隔5分鐘執(zhí)行一次(這個庫支持7位,精確到秒、年)
    if expr, err = cronexpr.Parse("*/5 * * * * * *"); err != nil {
        fmt.Println(err)
        return
    }

    //當前時間
    now = time.Now()

    //下次調度時間
    nextTime = expr.Next(now)

    //等待這個定時器超時
    time.AfterFunc(nextTime.Sub(now), func() {
        fmt.Println("被調度了:", nextTime)
    }) //下次時間減去當前時間

    time.Sleep(10 * time.Second)

}

調用一個cron
輸出:被調度了: 2019-04-19 17:00:30 +0800 CST

package main

import (
    "fmt"
    "github.com/gorhill/cronexpr"
    "time"
)

//代表一個任務
type CronJob struct {
    expr *cronexpr.Expression
    nextTime time.Time //expr.Next(time.Now())就可以得到下一次調度時間
}

func main()  {
    //需要有1個調度協(xié)程,它定時檢查所有Cron任務,誰過期了就執(zhí)行誰

    var (
        cronJob *CronJob
        expr *cronexpr.Expression
        now time.Time
        scheduleTable map[string] *CronJob //key:任務名字,
    )

    scheduleTable = make(map[string]*CronJob)

    //當前時間
    now = time.Now()

    //定義第一個cronjob
    expr = cronexpr.MustParse("*/5 * * * * * *")
    cronJob = &CronJob{
        expr: expr,
        nextTime: expr.Next(now),
    }
    //任務注冊到了調度表
    scheduleTable["job1"] = cronJob

    //定義第二個cronjob
    expr = cronexpr.MustParse("*/5 * * * * * *")
    cronJob = &CronJob{
        expr: expr,
        nextTime: expr.Next(now),
    }
    //任務注冊到了調度表
    scheduleTable["job2"] = cronJob

    //啟動調度協(xié)程
    go func() {
        var (
            jobName string
            cronJob *CronJob
            now time.Time
        )
        //定時檢查任務調度表是否有到期的
        for {
            now = time.Now()
            for jobName, cronJob = range scheduleTable {
                //判斷是否過期(如果下次調度時間早于等于當前時間,說明已經(jīng)過期了)
                if cronJob.nextTime.Before(now) || cronJob.nextTime.Equal(now) {
                    //啟動一個協(xié)程,執(zhí)行這個任務
                    go func(jobName string) {
                        fmt.Println("執(zhí)行:", jobName)
                    }(jobName)
                    //計算下一次調度時間
                    cronJob.nextTime = cronJob.expr.Next(now)
                    fmt.Println(jobName, "下次執(zhí)行時間:", cronJob.nextTime)
                }
            }

            select {
            //睡眠100毫秒(不讓它占用過多cpu)
            case <- time.NewTimer(100 * time.Millisecond).C: //將在100毫秒可讀,返回
            }

        }
    }()

    time.Sleep(100 * time.Second)

}

調用多個cron,按時間間隔輸出:
執(zhí)行: job1
job1 下次執(zhí)行時間: 2019-04-19 17:31:20 +0800 CST
job2 下次執(zhí)行時間: 2019-04-19 17:31:20 +0800 CST
執(zhí)行: job2
執(zhí)行: job1
job1 下次執(zhí)行時間: 2019-04-19 17:31:25 +0800 CST
執(zhí)行: job2
job2 下次執(zhí)行時間: 2019-04-19 17:31:25 +0800 CST
執(zhí)行: job1
job1 下次執(zhí)行時間: 2019-04-19 17:31:30 +0800 CST
job2 下次執(zhí)行時間: 2019-04-19 17:31:30 +0800 CST
執(zhí)行: job2
......

分享標題:go任務調度2(linux的cron調用)
URL地址:http://jinyejixie.com/article40/iieseo.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供手機網(wǎng)站建設、響應式網(wǎng)站、網(wǎng)站設計公司、網(wǎng)站排名外貿網(wǎng)站建設、ChatGPT

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名
和政县| 长丰县| 酉阳| 灵石县| 乌兰察布市| 英吉沙县| 木兰县| 涟水县| 全南县| 龙游县| 武乡县| 安岳县| 保康县| 安仁县| 荆门市| 哈巴河县| 防城港市| 大同县| 谢通门县| 滁州市| 龙州县| 辽阳县| 泾川县| 农安县| 隆昌县| 彰武县| 鄂伦春自治旗| 赣州市| 昌吉市| 灵武市| 嘉义县| 健康| SHOW| 卓尼县| 双桥区| 蓬莱市| 贵溪市| 定边县| 苍溪县| 信丰县| 家居|