天天看點

Node.js 中運作定時任務

cron 是一個定時執行工具,可以在無需人工幹預的情況下運作

安裝

$ npm install -g cron      

使用

const cronJob = require("cron").CronJob;

//每秒鐘執行一次
new cronJob('* * * * * *', function () {
        //your job code here
}, null, true, 'Asia/Chongqing');

//每隔30秒執行一次,會在0秒和30秒處執行
new cronJob('*/30 * * * * *', function () {
        //your job code here
}, null, true, 'Asia/Chongqing');

//從早上8點到下午18點,每隔半個小時執行一次,會在0分和30分處執行
new cronJob('* */30 8-18 * * *', function () {
        //your job code here
}, null, true, 'Asia/Chongqing');

//在每天的10點和18點的第26分鐘各執行一次
new cronJob('* 26 10,18 * * *', function () {
        //your job code here
}, null, true, 'Asia/Chongqing');      

不立即執行,人工啟動

const jobid = new cronJob('* 26 10,18 * * *', function () {
        //your job code here
}, null, false, 'Asia/Chongqing'); // Asia/Shanghai
jobid.start();      

cron 表達式

順序 分鐘 小時 日期 月份 星期 年(可選)
取值 0-59 0-59 0-23 1-30(31) 1-12 1-7 1970-2099
允許特殊字元 ,-*/ ,-*/ ,-*/ ,-*/?LWC ,-*/ ,-*/L#C , - * /

字段含義

*:代表所有可能的值
-:指定範圍
,:列出枚舉  例如在分鐘裡,"5,15"表示5分鐘和20分鐘觸發
/:指定增量  例如在分鐘裡,"3/15"表示從3分鐘開始,沒隔15分鐘執行一次
?:表示沒有具體的值,使用?要注意沖突
L:表示last,例如星期中表示7或SAT,月份中表示最後一天31或30,6L表示這個月倒數第6天,FRIL表示這個月的最後一個星期五
W:隻能用在月份中,表示最接近指定天的工作日
#:隻能用在星期中,表示這個月的第幾個周幾,例如6#3表示這個月的第3個周五      

示例

0 * * * * ? 每1分鐘觸發一次
0 0 * * * ? 每天每1小時觸發一次
0 0 10 * * ? 每天10點觸發一次
0 * 14 * * ? 在每天下午2點到下午2:59期間的每1分鐘觸發
0 30 9 1 * ? 每月1号上午9點半
0 15 10 15 * ? 每月15日上午10:15觸發
*/5 * * * * ? 每隔5秒執行一次
0 */1 * * * ? 每隔1分鐘執行一次
0 0 5-15 * * ? 每天5-15點整點觸發
0 0/3 * * * ? 每三分鐘觸發一次
0 0 0 1 * ?  每月1号淩晨執行一次