You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PM2定时启动Node.js进程且保留旧进程不终止?

解决PM2 Cron任务自动终止旧进程的问题

问题原因

PM2的start --cron或restart --cron命令是为单一进程实例设置定时调度规则,PM2会默认维护该实例的唯一性——每次触发cron时,它会终止当前运行的旧实例,再启动新实例。这和Windows任务计划“每次触发都启动独立任务、直到任务自行结束”的逻辑完全不同。

解决方案

要实现类似Windows任务计划的效果,需要让每次cron触发都启动一个独立的PM2进程实例,而不是复用同一个实例。推荐用系统crontab配合PM2启动唯一命名的进程:

步骤1:编辑系统crontab

执行以下命令打开crontab编辑器:

crontab -e

步骤2:添加定时任务规则

在编辑器中添加以下内容(注意替换PM2的实际路径,可通过which pm2查询):

*/2 * * * * /usr/local/bin/pm2 start pulldata.js --name "pulldata-$(date +\%Y\%m\%d\%H\%M\%S)" --no-autorestart
  • --name "pulldata-$(date +\%Y\%m\%d\%H\%M\%S)":用时间戳生成唯一进程名,确保每个实例独立
  • --no-autorestart:禁止PM2在进程执行完毕后自动重启它
  • 路径/usr/local/bin/pm2替换为你服务器上PM2的实际路径

步骤3:验证效果

保存crontab后,等待2分钟执行触发,用pm2 list查看进程列表,会看到多个以pulldata-时间戳命名的进程,每个进程都会运行至执行完毕后自动退出。

额外注意事项

  • 如果你的pulldata.js依赖特定环境变量,需要在crontab中预先设置,或者在脚本开头定义环境变量
  • 可添加--log /var/log/pulldata-%Y%m%d%H%M%S.log参数为每个进程生成独立日志,方便排查问题
  • 若要清理已完成的进程,可定期执行pm2 delete $(pm2 list | grep 'pulldata-' | awk '{print $2}')

内容的提问来源于stack exchange,提问作者rajesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 15:02:30