quartz和crontab的區別


quartz是OpenSymphony開源組織在Job scheduling領域又一個開源項目,它可以與J2EE與J2SE應用程序相結合也可以單獨使用。Quartz可以用來創建簡單或為運行十個,百個,甚至是好幾萬個Jobs這樣復雜的程序。Jobs可以做成標准的Java組件或 EJBs。Quartz的最新版本為Quartz 2.3.2。

crontab命令常見於Unix和類Unix的操作系統之中,用於設置周期性被執行的指令。該命令從標准輸入設備讀取指令,並將其存放於“crontab”文件中,以供之后讀取和執行。該詞來源於希臘語 chronos(χρνο),原意是時間。通常,crontab儲存的指令被守護進程激活, crond常常在后台運行,每一分鍾檢查是否有預定的作業需要執行。這類作業一般稱為cron jobs。

調度對比: Crontab vs Quartz

1.執行粒度不同:Crontab是進程調度,Quartz是線程調度。線程調度帶來2點優勢,一是更節省資源,二是可以在進程內做數據交換。
2.Crontab依賴於Unix系列平台,Quartz是Java實現因此是跨平台的
3.調度操作集上,Quartz的設置更為靈活,完全閉包Crontab。Crontab的最小調度單元為秒級,而Quartz可以更細。
4.Job監控方面,Quartz支持Listener,可以很方便的對job運行情況進行監控,並且能用JobStores進行調度信息的持久化(內存、DB均可),進而可以實現job可視化
5.高可用:最重要的一點,Quartz支持集群

使用區別

quartz是一個web框架中的插件,用於執行定時任務;crontab是一個linux定時任務執行命令,用於執行linux下的幾乎所有命令。
quartz的格式: [秒] [分] [小時] [日] [月] [周] [年]
crontab的格式: [分] [小時] [日] [月] [周] [命令]

在quartz中:

*:所有值; ?:不定值; -:區間值
實例:

0 0 12 * * ? 每天12點觸發
0 15 10 ? * * 每天10點15分觸發 
0 15 10 * * ? 每天10點15分觸發 
0 15 10 * * ? * 每天10點15分觸發 
0 15 10 * * ? 2005 2005年每天10點15分觸發 
0 * 14 * * ? 每天下午的 2點到2點59分每分觸發 
0 0/5 14 * * ? 每天下午的 2點到2點59分(整點開始,每隔5分觸發) 
0 0/5 14,18 * * ? 每天下午的 14點到18點(整點開始,每隔5分觸發) 
0 0-5 14 * * ? 每天下午的 2點到2點05分每分觸發 
0 10,44 14 ? 3 WED     3月分每周三下午的 2點10分和2點44分觸發 (特殊情況,在一個時間設置里,執行兩次或 兩次以上的情況) 
0 59 2 ? * FRI    每周5凌晨2點59分觸發; 
0 15 10 ? * MON-FRI 從周一到周五每天上午的10點15分觸發 
0 15 10 15 * ? 每月15號上午10點15分觸發 
0 15 10 L * ? 每月最后一天的10點15分觸發 
0 15 10 ? * 6L 每月最后一周的星期五的10點15分觸發 
0 15 10 ? * 6L 2002-2005 從2002年到2005年每月最后一周的星期五的10點15分觸發 
0 15 10 ? * 6#3 每月的第三周的星期五開始觸發 
0 0 12 1/5 * ? 每月的第一個中午開始每隔5天觸發一次 
0 11 11 11 11 ? 每年的11月11號 11點11分觸發(光棍節)
在crontab中:

只有*和-,沒有問號。
實例:

30 21 * * * /usr/local/apache/bin/apachectl restart #上面的例子表示每晚的21:30重啟apache。
45 4 1,10,22 * * /usr/local/apache/bin/apachectl restart #上面的例子表示每月1、10、22日的4 : 45重啟apache。
10 1 * * 6,0 /usr/local/apache/bin/apachectl restart #上面的例子表示每周六、周日的1 : 10重啟apache。
0,30 18-23 * * * /usr/local/apache/bin/apachectl restart #上面的例子表示在每天18 : 00至23 : 00之間每隔30分鍾重啟apache。
0 23 * * 6 /usr/local/apache/bin/apachectl restart #上面的例子表示每星期六的11 : 00 pm重啟apache。
* */1 * * * /usr/local/apache/bin/apachectl restart #每一小時重啟apache
* 23-7/1 * * * /usr/local/apache/bin/apachectl restart #晚上11點到早上7點之間,每隔一小時重啟apache
0 11 4 * mon-wed /usr/local/apache/bin/apachectl restart #每月的4號與每周一到周三的11點重啟apache
0 4 1 jan * /usr/local/apache/bin/apachectl restart #一月一號的4點重啟apache

驗證和生產定時任務的網站

網址: https://crontab-generator.org/
說明: 只需要按照業務需求,調整Minutes,Hours,Days,Months,Weekday這5個參數,然后在'Command To Execute'中輸入要定時執行的命令即可。最后點擊網頁最后的'Generate Crontab Line'就能夠得到我們想要的表達式:

網址: https://crontab.guru/
說明:這個網址的編輯框做的相當好,光標落在的編輯字段,下方會自動切換到對這個用法的詳細描述。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM