使用node-cron實(shí)現(xiàn)Node.js定時(shí)任務(wù)方式
1. 簡(jiǎn)介
node-cron 是一個(gè)輕量級(jí)的Node.js庫(kù),用于在指定時(shí)間或間隔執(zhí)行任務(wù)。
它是Unix系統(tǒng)cron工具的JavaScript實(shí)現(xiàn),適用于需要定時(shí)執(zhí)行腳本的場(chǎng)景(如數(shù)據(jù)備份、定期爬蟲等)。
2. 安裝
npm install node-cron # 或 yarn add node-cron
3. 基礎(chǔ)用法
import cron from 'node-cron';
// 每分鐘執(zhí)行
cron.schedule('* * * * *', () => {
console.log('每分鐘觸發(fā)');
});
4. Cron表達(dá)式詳解
表達(dá)式由5個(gè)字段組成:
* * * * * ┬ ┬ ┬ ┬ ┬ │ │ │ │ │ │ │ │ │ └── 星期幾 (0 - 7) (0和7代表周日) │ │ │ └────── 月份 (1 - 12) │ │ └────────── 日期 (1 - 31) │ └────────────── 小時(shí) (0 - 23) └─────────────────── 分鐘 (0 - 59)
常用示例:
| 表達(dá)式 | 說(shuō)明 |
|---|---|
| */5 * * * * | 每5分鐘 |
| 0 * * * * | 每小時(shí)整點(diǎn) |
| 0 0 * * * | 每天午夜 |
| 0 9 * * 1-5 | 工作日早上9點(diǎn) |
| 30 3 15 * * | 每月15日凌晨3:30 |
5. 高級(jí)功能
5.1 帶參數(shù)配置
const task = cron.schedule('*/10 * * * *', () => {
console.log('每10分鐘執(zhí)行');
}, {
scheduled: true, // 是否立即啟動(dòng)
timezone: 'Asia/Shanghai' // 時(shí)區(qū)設(shè)置
});
5.2 任務(wù)控制
// 暫停任務(wù) task.stop(); // 恢復(fù)任務(wù) task.start(); // 檢查任務(wù)狀態(tài) console.log(task.getStatus()); // 返回 'running' 或 'stopped'
6. 實(shí)際應(yīng)用示例
示例1:每日數(shù)據(jù)清理
import cron from 'node-cron';
import cleanupDatabase from './cleanup.js';
// 每天凌晨3點(diǎn)清理
cron.schedule('0 3 * * *', () => {
console.log('開始數(shù)據(jù)庫(kù)清理...');
cleanupDatabase();
});
示例2:API定時(shí)請(qǐng)求
import axios from 'axios';
// 每30分鐘獲取天氣數(shù)據(jù)
cron.schedule('*/30 * * * *', async () => {
const res = await axios.get('https://api.weather.com/data');
console.log('天氣數(shù)據(jù):', res.data);
});
7. 注意事項(xiàng)
- 精度問題:Node.js事件循環(huán)可能導(dǎo)致最多幾毫秒的延遲
- 錯(cuò)誤處理:務(wù)必在任務(wù)函數(shù)中添加try/catch
- 長(zhǎng)任務(wù):避免任務(wù)執(zhí)行時(shí)間超過間隔時(shí)間
- 集群環(huán)境:在多進(jìn)程部署時(shí)需要額外處理防止重復(fù)執(zhí)行
8. 替代方案
node-schedule:更復(fù)雜的調(diào)度規(guī)則bull:分布式任務(wù)隊(duì)列- 系統(tǒng)級(jí)cron:通過
child_process調(diào)用
提示:在生產(chǎn)環(huán)境中建議添加日志記錄和監(jiān)控,可以使用winston或bunyan記錄任務(wù)執(zhí)行情況。
參考資料:
- node-cron官方文檔:https://github.com/node-cron/node-cron
- Cron表達(dá)式標(biāo)準(zhǔn):IEEE Std 1003.1
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Node.js 數(shù)據(jù)庫(kù) CRUD 項(xiàng)目示例詳解(完美解決方案)
這篇文章主要介紹了Node.js 數(shù)據(jù)庫(kù) CRUD 項(xiàng)目示例詳解(完美解決方案),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2025-04-04
node.js中的buffer.copy方法使用說(shuō)明
這篇文章主要介紹了node.js中的buffer.copy方法使用說(shuō)明,本文介紹了buffer.copy的方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下2014-12-12
Node.js成為Web應(yīng)用開發(fā)最佳選擇的原因
本篇文章給大家詳細(xì)分析了Node.js 成為 Web 應(yīng)用開發(fā)最佳選擇的十個(gè)原因,對(duì)此有需要的朋友參考下。2018-02-02
node.js Promise對(duì)象的使用方法實(shí)例分析
這篇文章主要介紹了node.js Promise對(duì)象的使用方法,結(jié)合實(shí)例形式分析了node.js中Promise對(duì)象的功能、定義、調(diào)用方法及相關(guān)使用技巧,需要的朋友可以參考下2019-12-12
利用Chrome DevTools直接調(diào)試Node.js和JavaScript的方法詳解(并行)
現(xiàn)在我們可以用瀏覽器調(diào)試node.js了!!!下面這篇文章主要介紹了利用Chrome DevTools直接調(diào)試Node.js和JavaScript的方法步驟,文中介紹的很詳細(xì),需要的朋友可以參考學(xué)習(xí),下面來(lái)一起看看吧。2017-02-02

