如何让Node.js Cron任务在系统关机后仍自动每小时运行?
Node.js 定时任务实现开机自启+每小时执行方案
方案1:系统原生定时任务(最稳定可靠)
Linux/macOS 环境
- 编写执行脚本
创建一个run-cron.sh文件,填入以下内容(替换成你的Node实际路径和脚本路径):
#!/bin/bash /usr/bin/node /home/your-user/scripts/your-cron-task.js >> /home/your-user/logs/cron-task.log 2>&1
给脚本添加执行权限:
chmod +x run-cron.sh
- 配置系统Cron
打开crontab编辑器:
crontab -e
添加一行定时规则(每小时整点执行):
0 * * * * /home/your-user/scripts/run-cron.sh
保存退出后,确保cron服务开机自启:
# Ubuntu/Debian systemctl enable cron # CentOS/RHEL systemctl enable crond
Windows 环境
- 打开「任务计划程序」,点击「创建基本任务」
- 填写任务名称,点击下一步;触发器选择「每天」,设置起始时间后,勾选「重复任务间隔」为1小时,持续时间选「无限期」
- 操作选择「启动程序」,程序或脚本选择Node.exe的路径(比如
C:\Program Files\nodejs\node.exe),添加参数填入你的脚本完整路径(比如C:\Users\YourName\scripts\your-cron-task.js) - 勾选「不管用户是否登录都要运行」,并在「设置」中勾选「如果任务失败,每隔X分钟重试」,最后完成配置。
方案2:正确配置PM2实现自启
如果坚持用PM2,可能是之前没完成开机自启配置:
- 确保你的Node定时脚本逻辑正确(以
node-cron为例):
const cron = require('node-cron'); // 每小时整点执行 cron.schedule('0 * * * *', () => { console.log('执行定时任务'); // 你的业务逻辑 });
- 用PM2启动脚本:
pm2 start your-cron-task.js --name hourly-cron
- 保存PM2进程列表(重启后恢复):
pm2 save
- 设置PM2开机自启,执行以下命令后按照终端提示运行生成的sudo命令:
pm2 startup
- 验证:重启系统后执行
pm2 list,检查进程是否正常运行,日志可通过pm2 logs hourly-cron查看。
常见问题排查
- PM2未生效:检查是否执行了
pm2 save和pm2 startup,脚本路径是否为绝对路径,避免相对路径导致找不到文件 - Cron表达式错误:
0 * * * *代表每小时整点,确认你的表达式符合需求 - 权限问题:确保脚本和日志目录有读写权限,Linux下避免用root用户运行不必要的进程,Windows下给任务计划分配最高权限
内容的提问来源于stack exchange,提问作者Pravin Raja
相关产品推荐
相关产品推荐

