<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    crontab 表達式解析庫

    VSole2022-08-03 10:37:00

    什么是cronexpr

    cronexpr是一個高級的crontab解析表達式的庫,用于解析比原生crontab更好強大的定時任務解析器,當然,這個包是不包含定時任務功能的

    安裝

    GO MOD模式下,執行:

    $ go get github.com/gorhill/cronexpr 
    

    案例

    這個庫實際上非常簡單,我這里拿一個小的例子來展示一下

    package main
    import (
     "fmt"
     "github.com/gorhill/cronexpr"
     "log"
     "testing"
     "time"
    )
    func TestCron(t *testing.T) {
     _,nextTimeArr := CheckCrontabExpr("* * 10 * * * *")
     for _,v := range nextTimeArr{
      fmt.Println(v)
     }
    }
    func CheckCrontabExpr(crontabs string) (err error, nextTimeArr []string) {
     var nextTime []time.Time
     if _, err = cronexpr.Parse(crontabs); err != nil {
      log.Fatal(err)
      return err, nil
     }
     //返回當前crontab后的5次執行,n為次數
     nextTime = cronexpr.MustParse(crontabs).NextN(time.Now(), 5)
     for _, v := range nextTime {
      nextTimeArr = append(nextTimeArr, v.String())
     }
     return nil, nextTimeArr
    }
    

    上面的例子是打印這個crontab表達式“* * 10 * * * *”的后五次執行時間,結果如下:

    === RUN   TestCron
    2021-04-27 10:00:00 +0800 CST
    2021-04-27 10:00:01 +0800 CST
    2021-04-27 10:00:02 +0800 CST
    2021-04-27 10:00:03 +0800 CST
    2021-04-27 10:00:04 +0800 CST
    --- PASS: TestCron (0.01s)
    PASS
    

    由于這個crontab表達式的最小粒度是秒,所以我們如果要自己寫一個定時任務的話,可以用:

    for{
        var now = time.now()
        nextDoCron := cronexpr.MustParse("* * 10 * * * *").Next(now)
     if cronJob.nextTime.Before(now) || cronJob.nextTime.Equal(now) 
        ......
        ......
     select {
      case <-time.NewTimer(1 * time.Second).C:
     }
    }
    

    這樣就只需要每秒檢查一次,nextDoCron變量就是根據當前時間time.now()獲取到的下一次執行時間

    判斷過期了或者剛好過期時,則執行if中的內容即可做到定時任務的功效

    他的crontab表達式支持非常多的定義,這里我寫個自己的總結:

    /**
     創建時間:2020-07-08 11:18:24
     根據傳入的表達式,檢查表達式是否正確:
          字段名       是否強制      支持的格式      支持的特殊格式
     ----------     ----------   --------------    --------------------
     Seconds        No           0-59              * / , -
     Minutes        Yes          0-59              * / , -
     Hours          Yes          0-23              * / , -
     Day of month   Yes          1-31              * / , - L W (L指最后last,若用L,表示月底,W指的是最近的工作日)
     Month          Yes          1-12 or JAN-DEC   * / , -
     Day of week    Yes          0-6 or SUN-SAT    * / , - L # (L指最后last,若用1L,表示本月最后一周的周一)
     Year           No           1970–2099         * / , -
     
     00 */10 08-19 * * * * * 從08點到19點,每10分鐘執行一次
     2021-04-27 08:00:00 +0800 CST
     2021-04-27 08:10:00 +0800 CST
     2021-04-27 08:20:00 +0800 CST
     2021-04-27 08:30:00 +0800 CST
     2021-04-27 08:40:00 +0800 CST
     
     00 00 17 * * 1-5 * 我們公司點加班餐的定時任務推送消息 周一到周五,每天的17點推送一次
     2021-04-27 17:00:00 +0800 CST
     2021-04-28 17:00:00 +0800 CST
     2021-04-29 17:00:00 +0800 CST
     2021-04-30 17:00:00 +0800 CST
     2021-05-03 17:00:00 +0800 CST
     
    */
    

    總結

    cronexpr庫實際上解決了我們自己去解析表達式的苦,我記得之前我用PHP寫過一版crontab表達式解析,那叫一個心驚膽戰,生怕自己寫錯造成生產事故,定時任務有很多種實現方式,這個庫只是為我們解決了最基本也是最關鍵的表達式解析,推薦給大家,可以看看源碼喲~

    crontabcst
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    crontab 表達式解析庫
    2022-08-03 10:37:00
    什么是cronexprcronexpr是一個高級的crontab解析表達式的庫,用于解析比原生crontab更好強大的定時任務解析器,當然,這個包是不包含定時任務功能的安裝GO MOD模式下,執行:$?案例這個庫實際上非常簡單,我這里拿一個小的例子來展示一下package?//返回當前crontab后的5次執行,n為次數
    └─50-After-systemd-logind\x2eservice.conf, 50-After-systemd-user-sessions\x2eservice.conf, 50-Description.conf, 50-SendSIGHUP.conf, 50-Slice.conf, 50-TasksMax.con. Active: active since 一 2021-07-12 10:05:01 CST; 4h 52min ago. 真不巧,看起來不是注冊到 systemd 的,那么是誰拉起來的呢?啊,是 crontab非常不巧,我當時一心想找是哪個 service,沒注意到 crontab 的存在,還以為上次的那個挖礦木馬換了個 service 的名字,還去這個路徑找了好久,找了半天也沒有看到惡意的 service 啊突然想到我還沒看 crontab于是打開crontab發現了一條指令他靜靜的呆在那里像是在嘲笑我太菜了,這個套路都沒注意到 :P于是,注釋掉這行,然后對著剛剛 systemd 輸出的三個進程一頓 kill ├─2075 tOAK5Ejl
    └─50-After-systemd-logind\x2eservice.conf, 50-After-systemd-user-sessions\x2eservice.conf, 50-Description.conf, 50-SendSIGHUP.conf, 50-Slice.conf, 50-TasksMax.con. Active: active since 一 2021-07-12 10:05:01 CST; 4h 52min ago. 真不巧,看起來不是注冊到 systemd 的,那么是誰拉起來的呢?啊,是 crontab非常不巧,我當時一心想找是哪個 service,沒注意到 crontab 的存在,還以為上次的那個挖礦木馬換了個 service 的名字,還去這個路徑找了好久,找了半天也沒有看到惡意的 service 啊突然想到我還沒看 crontab于是打開crontab發現了一條指令他靜靜的呆在那里像是在嘲笑我太菜了,這個套路都沒注意到 :P于是,注釋掉這行,然后對著剛剛 systemd 輸出的三個進程一頓 kill├─2075 tOAK5Ejl
    實戰 | 挖礦木馬排查
    2023-02-22 10:05:36
    └─50-After-systemd-logind\x2eservice.conf, 50-After-systemd-user-sessions\x2eservice.conf, 50-Description.conf, 50-SendSIGHUP.conf, 50-Slice.conf, 50-TasksMax.con. Active: active since 一 2021-07-12 10:05:01 CST; 4h 52min ago. 真不巧,看起來不是注冊到 systemd 的,那么是誰拉起來的呢?啊,是 crontab非常不巧,我當時一心想找是哪個 service,沒注意到 crontab 的存在,還以為上次的那個挖礦木馬換了個 service 的名字,還去這個路徑找了好久,找了半天也沒有看到惡意的 service 啊突然想到我還沒看 crontab于是打開crontab發現了一條指令他靜靜的呆在那里像是在嘲笑我太菜了,這個套路都沒注意到 :P于是,注釋掉這行,然后對著剛剛 systemd 輸出的三個進程一頓 kill├─2075 tOAK5Ejl
    Apache ActiveMQ是最流行的開源、多協議、基于 Java 的消息代理。它支持行業標準協議,用戶可以從多種語言和平臺的客戶端使用AMQP協議集成多平臺應用程序。
    網絡拓撲場景介紹局域網下含有物理機、proxy server主機。物理機即普通客戶主機,proxy server即企業提供的代理,此網絡模擬的是公網環境。
    安裝Linux系統最小化,即選包最小化,yum安裝軟件包也要最小化,無用的包不裝。開機自啟動服務最小化,即無用的服務不開啟。Linux系統文件及目錄的權限設置最小化,禁止隨意創建、更改、刪除文件。在生產環境中,刪除多余的賬戶信息。
    本篇文章是WebLogic中間件漏洞復現,記錄了近幾年來爆出的WebLogic中間件漏洞主要分為六個部分:WebLogic簡介、WebLogic安裝、WebLogic漏洞復現、WebLogic SSRF聯動Redis、WebLogic實戰和WebLogic防御措施。
    WebLogic是由美國Oracle公司出品的一application server,準確的說就是一個基于JAVAEE而開發的一個中間件,類似Tomcat,WebLogic是一個用于開發,集成,部署與管理大型分布式Web應用,網絡應用和數據庫的java應用服務器。將java動態功能與java Enterprise標準的安全性引入大型網絡應用的開發,集成,部署與管理之中。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类