Nodejs 第五十二章(定时任务)

什么是定时任务?

定时任务是指在预定的时间点或时间间隔内执行的任务或操作。它们是自动化执行特定逻辑的一种方式,可用于执行重复性的、周期性的或计划性的任务。

定时任务通常用于以下情况:

  1. 执行后台任务:定时任务可用于自动执行后台任务,如数据备份、日志清理、缓存刷新等。通过设定适当的时间点或时间间隔,可以确保这些任务按计划进行,而无需手动干预。
  2. 执行定期操作:定时任务可用于执行定期操作,如发送电子邮件提醒、生成报告、更新数据等。通过设定适当的时间点,可以自动触发这些操作,提高效率并减少人工操作的需求。
  3. 调度任务和工作流:定时任务可以用于调度和协调复杂的任务和工作流程。通过设置任务之间的依赖关系和执

安装依赖

sh 复制代码
npm install node-schedule

node-schedule文档

一般定时任务都是用cron表达式去表示时间的

cron表达式

Cron表达式是一种用于指定定时任务执行时间的字符串表示形式。它由6个或7个字段组成,每个字段表示任务执行的时间单位和范围。

Cron表达式的典型格式如下:

markdown 复制代码
*    *    *    *    *    *
┬    ┬    ┬    ┬    ┬    ┬
│    │    │    │    │    │
│    │    │    │    │    └── 星期(0 - 6,0表示星期日)
│    │    │    │    └───── 月份(1 - 12)
│    │    │    └────────── 日(1 - 31)
│    │    └─────────────── 小时(0 - 23)
│    └──────────────────── 分钟(0 - 59)
└───────────────────────── 秒(0 - 59)
是否必需 取值范围 特殊字符
秒 Seconds [0, 59] * , - /
分钟 Minutes [0, 59] * , - /
小时 Hours [0, 23] * , - /
日期 DayofMonth [1, 31] * , - / ? L W
月份 Month [1, 12]或[JAN, DEC] * , - /
星期 DayofWeek [1, 7]或[MON, SUN]。若使用[1, 7]表达方式,1代表星期一,7代表星期日。 * , - / ? L #
年 Year 1970+ - * /

每个字段可以接受特定的数值、范围、通配符和特殊字符来指定任务的执行时间:

  • 数值:表示具体的时间单位,如1、2、10等。
  • 范围:使用-连接起始和结束的数值,表示一个范围内的所有值,如1-5表示1到5的所有数值。
  • 通配符:使用*表示匹配该字段的所有可能值,如*表示每分钟、每小时、每天等。
  • 逗号分隔:使用逗号分隔多个数值或范围,表示匹配其中任意一个值,如1,3表示1或3。
  • 步长:使用/表示步长,用于指定间隔的数值,如*/5表示每隔5个单位执行一次。
  • 特殊字符:Cron表达式还支持一些特殊字符来表示特定的含义,如?用于替代日和星期字段中的任意值,L表示最后一天,W表示最近的工作日等。

以下是一些常见的Cron表达式示例:

  • * * * * *:每分钟执行一次任务。
  • 0 * * * *:每小时的整点执行一次任务。
  • 0 0 * * *:每天的午夜执行一次任务。
  • 0 0 * * 1:每周一的午夜执行一次任务。
  • 0 0 1 * *:每月的1号午夜执行一次任务。
  • 0 0 1 1 *:每年的1月1日午夜执行一次任务。

代码编写(掘金自动签到)

js 复制代码
import schedule from 'node-schedule'
import request from 'request'
import config from './config.js'
schedule.scheduleJob('0 30 0 * * *', () => {
    request(config.check_url, {
        method: 'post',
        headers: {
            Referer: config.url,
            Cookie: config.cookie
        },
    }, function (error, response, body) {
        if (!error && response.statusCode == 200) {
            console.log(body)
        }
    })
})

config.js

js 复制代码
export default {
    cookie: 'sessionid=你的cookie',
    url: 'https://juejin.cn/',
    check_url: 'https://api.juejin.cn/growth_api/v1/check_in?aid=你的aid&uid=你的uid'
}

aid uid cookie

aid和uid随便去个接口找一下就有

cookie

相关推荐
yqcoder3 分钟前
CSS 外边距重叠(Margin Collapsing):现象、原理与完美解决方案
前端·css
山楂树の1 小时前
图像标注大坑:img图片 + Canvas 叠加标注,同步放大后标注位置偏移、对不齐?详解修复方案及亚像素处理原理
前端·css·学习·canva可画
本山德彪1 小时前
我做了一个拼豆图纸生成器,把照片秒变图纸
前端
DTrader1 小时前
用TS无法实盘量化? - 实盘均线策略
前端·api
进击的夸父1 小时前
vfojs:Vue 超集架构,外壳React灵魂Vue
前端
编程老船长1 小时前
解决不同项目需要不同 Node.js 版本的问题
前端·vue.js
Wect2 小时前
LeetCode 5. 最长回文子串:DP + 中心扩展
前端·算法·typescript
漫游的渔夫2 小时前
前端开发者做 Agent:别写成一次请求,用 5 步受控循环防止 AI 乱跑
前端·人工智能·typescript
kyriewen3 小时前
Webpack vs Vite:一个是“老黄牛”,一个是“猎豹”,你选谁?
前端·webpack·vite
打小就很皮...3 小时前
html2canvas + jsPDF 生成 PDF 的踩坑与解决方案总结
前端·pdf