在 *nix
機器上,咱們一般用 crontab
來管理定時任務,好比指定時間重啓某個服務,備份數據庫,跑某些分析/統計服務等。node
目前有不少任務調試系統和工具,好比:git
每一個系統都有本身的特點和應用場景,若是你只想集中管理多臺機器上的定時任務,能夠試試 cronsun。github
cronsun 支持:web
[web] | -------------------------- (add/del/update/exec jobs)| |(query job exec result) [etcd] [mongodb] | ^ -------------------- | | | | | [node.1] [node.2] [node.n] | (job exec fail)| | | | [send mail]<-----------------------------------------(job exec result)
在 cronsun
中,有三種類型的的任務:mongodb
crontab
中的任務同樣。crontab
任務是單機的,若是執行任務的機器出現問題,任務可能執行失敗。cronsun
提供此任務類型是保證有多臺機器能夠執行一個任務,但在執行任務被執行時,只有一臺機器在執行任務。任務分組是爲了方便管理,在添加任務時能夠在任務分組裏增長新的分組,查詢時按分組查出相應的任務。shell
至關於 crontab
中的執行命令,複雜的任務(如 pipe)須要寫成 shell 腳本。數據庫
指定執行任務的用戶apache
超過設定的時長,cronsun
會中止執行任務,防止出問題的任務長時間佔用資源。安全
設置在單個節點上面同時可執行多少個相同的任務,針對某些任務執行時間很長,但兩次任務執行間隔較短時比較有用。swoole
任務執行失敗時,從新嘗試執行任務,直到任務執行成功或超過設置的次數。
至關於 crontab
中的時間規則,cronsun
中的時間規則支持到秒級,比 crontab
多支持一位,cronsun
中支持多種時間格式。一個任務能夠有多個定時器,主要是方便於多個節點在不一樣時間點執行同一個任務。
經常使用時間格式:
0 1 2 3 4 5 | | | | | | | | | | | +------ day of week (0 - 6) (Sunday=0) | | | | +------ month (1 - 12) | | | +-------- day of month (1 - 31) | | +---------- hour (0 - 23) | +------------ min (0 - 59) +-------------- sec (0-59)
字段名 | 容許的值 | 容許的特殊字符 |
---|---|---|
Seconds | 0-59 | * / , - |
Minutes | 0-59 | * / , - |
Hours | 0-23 | * / , - |
Day of month | 1-31 | * / , - ? |
Month | 1-12 or JAN-DEC | * / , - |
Day of week | 0-6 or SUN-SAT | * / , - ? |
星號 ( * )
星號會匹配字段中的全部值,如在小時字段用了星號,表示每一個小時都會匹配。
斜線 ( / )
匹配指定的數字,如 */3
在小時字段中等於 0,3,6,9,12,15,18,21
等被 3
整除的數。
逗號 ( , )
匹配分開的值,如 1,3,4,7,8
在小時字段中表示這裏面的小時會匹配。
連詞符 ( - )
匹配範圍,例如:1-6
,意思等同於 1,2,3,4,5,6
。
問題 ( ? )
在 day-of-month 或者 day-of-week 字段可代替 *
。
預約格式
Entry | Description | Equivalent To |
---|---|---|
@yearly (or @annually) | Run once a year, midnight, Jan. 1st | 0 0 0 1 1 * |
@monthly | Run once a month, midnight, first of month | 0 0 0 1 * * |
@weekly | Run once a week, midnight on Sunday | 0 0 0 * * 0 |
@daily (or @midnight) | Run once a day, midnight | 0 0 0 * * * |
@hourly | Run once an hour, beginning of hour | 0 0 * * * * |
執行任務的機器,須要部署 cronnode
。
方便管理節點,若是在任務的定時器裏選擇某個節點分組,則表示任務會在這個節點分組的全部結點上運行。
cronnode
出現問題的節點,通常狀況下是 cronnode
服務掛掉,若是 etcd
的網絡很差,也會臨時出現故障節點。
cronnode
服務正常關閉的結點。
正常服務的結點。
用於查詢任務的執行結果,日誌存儲在 MongoDB 中,若是隻想保存最新一段時間內的執行結果,可使用 MongoDB 的 Capped Collections,在部署的時候建立一個名爲 job_log
的 Capped Collection。