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

如何用PM2每10分钟运行Bash脚本?解决cron_restart触发异常

解决PM2定时执行脚本的两个常见问题

让我来帮你搞定这两个PM2使用中的实际问题,都是我自己踩过的坑:

一、用PM2每10分钟运行Bash脚本

PM2本身支持定时任务,但很多人会搞混cron_restart和真正的定时触发配置。正确的做法是使用PM2的定时任务触发功能,而不是重启进程的配置:

  • 命令行快速启动:
    直接用--cron参数指定执行间隔,每10分钟运行一次的话:

    pm2 start your_script.sh --cron "*/10 * * * *" --name "timed-script"
    

    记得先给脚本加执行权限:chmod +x your_script.sh

  • 配置文件方式(更适合复杂场景):
    创建ecosystem.config.js,写入以下内容:

    module.exports = {
      apps: [
        {
          name: "timed-script",
          script: "./your_script.sh",
          cron: "*/10 * * * *", // 每10分钟执行一次
          autorestart: false, // 关键:执行完就结束,不要自动重启
          watch: false
        }
      ]
    };
    

    然后用pm2 start ecosystem.config.js启动即可。

二、解决cron_restart导致脚本频繁重启的异常

你遇到的问题核心是误解了cron_restart的作用:

cron_restart的功能是「定时重启正在运行的进程」,而不是「定时触发脚本执行」

当你的脚本(比如date >> time.log && sleep 5)执行5秒后就结束了,PM2会默认认为进程异常退出,然后按照它的自动重启策略(默认是always)立刻重启这个脚本,导致一分钟内重复执行N次,完全不符合你的预期。

解决方案:替换为真正的定时任务配置

把原来的cron_restart换成cron字段,并且关闭自动重启:
修改你的PM2配置,比如:

module.exports = {
  apps: [
    {
      name: "minute-script",
      script: "./your_script.sh",
      cron: "* * * * *", // 每分钟触发一次执行
      autorestart: false, // 执行完毕后不自动重启
      watch: false
    }
  ]
};

这样配置后,PM2会严格按照cron表达式的时间点触发脚本执行,执行完就结束,直到下一个时间点再运行,完美解决频繁重启的问题。

验证方式

用pm2 logs minute-script查看日志,你会看到脚本每分钟只执行一次,不会出现连续重启的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:21:13