在 Linux 上用 JavaScript(Node.js)做定时任务,常见有几种方式,从“系统级”到“代码级”都有。下面按使用场景给你总结。
crontab适合:每天 / 每小时 / 固定时间执行
crontab -e
添加:
*/5 * * * * /usr/bin/node /home/user/task.js >> /home/user/task.log 2>&1
说明:
/usr/bin/node:Node 路径(用 which node 查)task.js:你的 JS 文件>> task.log:日志输出✅ 优点:稳定、开机自启
❌ 缺点:不够灵活(秒级不行)
setInterval(最简单)适合:服务常驻时定时执行
setInterval(() => {
console.log('定时任务执行', new Date());
}, 60 * 1000); // 每 60 秒
✅ 简单
❌ 不适合精确时间(如每天 3 点)
node-cron(最常用 ⭐)适合:类 crontab 的 JS 定时任务
npm install node-cron
const cron = require('node-cron');
cron.schedule('0 3 * * *', () => {
console.log('每天凌晨 3 点执行');
});
时间格式:
* * * * *
分 时 日 月 周
✅ 灵活、可读性强
❌ 程序不能退出
node-schedule(更强大)适合:复杂时间规则
npm install node-schedule
const schedule = require('node-schedule');
schedule.scheduleJob('0 0 3 * * *', () => {
console.log('每天 3:00 执行');
});
支持:
如果你用 Node 内部定时任务,建议配合:
npm install -g pm2
pm2 start task.js
pm2 save
pm2 startup
✅ 崩溃自动重启
✅ 开机自启
| 场景 | 推荐方式 |
|---|---|
| 简单脚本 | crontab |
| Node 服务内定时 | node-cron |
| 复杂时间 | node-schedule |
| 生产环境 | crontab + PM2 |
❗ Node 路径问题(crontab 中必须写绝对路径)
❗ 时区问题(Linux / Node 时区不一致)
❗ 任务崩溃导致定时失效(用 PM2)
如果你愿意,可以告诉我:
我可以直接帮你写完整示例。