什么是定时任务?
定时任务是指在预定的时间点或时间间隔内执行的任务或操作。它们是自动化执行特定逻辑的一种方式,可用于执行重复性的、周期性的或计划性的任务。
定时任务通常用于以下情况:
- 执行后台任务:定时任务可用于自动执行后台任务,如数据备份、日志清理、缓存刷新等。通过设定适当的时间点或时间间隔,可以确保这些任务按计划进行,而无需手动干预。
- 执行定期操作:定时任务可用于执行定期操作,如发送电子邮件提醒、生成报告、更新数据等。通过设定适当的时间点,可以自动触发这些操作,提高效率并减少人工操作的需求。
- 调度任务和工作流:定时任务可以用于调度和协调复杂的任务和工作流程。通过设置任务之间的依赖关系和执
安装依赖
sh
npm install 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