PM2 cron_restart配置异常:每周任务变为每5-6分钟执行
问题原因与解决办法
为什么会频繁重启?
你的R脚本是一次性执行任务,运行完毕就会退出,但pm2默认开启了autorestart: true,它会把进程退出判定为崩溃,自动反复重启——每5-6分钟就是pm2默认的重启间隔。而你用的cron_restart是用来重启正在运行的常驻进程的,根本不适合触发一次性脚本的定时执行。
另外注意配置里的name字段拼写错误(my-R-sctipt应为my-R-script),虽然不影响功能,但建议修正避免混淆。
正确配置方案
方案1:修改现有配置,关闭自动重启
给配置加上autorestart: false,这样脚本执行完后pm2不会自动重启,只在cron_restart指定的时间触发执行:
module.exports = { apps : [{ name: "my-R-script", script: "../my-R-script.R", instances: 1, exec_mode: "fork", out_file: "/dev/null", error_file: "/dev/null", interpreter: "Rscript", cron_restart: "0 0 * * 5", autorestart: false // 关键:关闭自动重启 }] };
方案2:用pm2原生定时任务(更推荐)
直接用cron字段(不是cron_restart)来指定定时执行时间,专门适配一次性任务场景:
module.exports = { apps : [{ name: "my-R-script", script: "../my-R-script.R", interpreter: "Rscript", cron: "0 0 * * 5", // 直接设置定时执行时间 autorestart: false, out_file: "/dev/null", error_file: "/dev/null" }] };
生效步骤
- 先删除旧进程:
pm2 delete my-R-script - 启动新配置:
pm2 start ecosystem.config.js - 可以用
pm2 logs my-R-script查看日志,验证只有每周五0点会执行一次,不会再频繁重启
内容的提问来源于stack exchange,提问作者Sebastian
相关产品推荐
相关产品推荐

