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

如何让PM2 Cron任务在72小时后自动停止并终止定时任务?

实现PM2 Cron任务72小时后自动终止的几种方案

我来给你几个实用的方法,不用手动执行pm2 delete就能让你的shoot-messages任务在72小时后自动停止并移除:

方案1:利用PM2的JavaScript API编写定时脚本

PM2自带Node.js API,能直接通过脚本控制进程生命周期,这是最灵活可靠的方式:

  1. 新建一个控制脚本auto-stop.js,内容如下:
const pm2 = require('pm2');

// 72小时转换成毫秒:72*60*60*1000 = 259200000
const STOP_DELAY = 72 * 60 * 60 * 1000;

pm2.connect((err) => {
  if (err) {
    console.error(err);
    process.exit(1);
  }

  // 设置定时器,72小时后执行停止删除操作
  setTimeout(() => {
    pm2.delete('shoot-messages', (err) => {
      if (err) {
        console.error(`删除任务失败: ${err}`);
      } else {
        console.log('shoot-messages任务已成功停止并删除');
      }
      pm2.disconnect(); // 断开PM2连接
      process.exit(0);
    });
  }, STOP_DELAY);
});
  1. 启动你的Cron任务时,同时启动这个控制脚本(用PM2管理确保它后台运行):
pm2 start shoot-msg.sh --name shoot-messages -i 4 --cron "*/5 * * * *"
pm2 start auto-stop.js --name auto-stop-shoot

这样auto-stop-shoot进程会在后台默默等待72小时,到时自动调用PM2 API删除目标任务。

方案2:在业务脚本中加入过期检查

如果不想额外启动Node.js进程,可以直接在你的shoot-msg.sh里加逻辑,每次任务触发时先检查是否超时:

  1. 启动任务时先记录启动时间到临时文件:
pm2 start shoot-msg.sh --name shoot-messages -i 4 --cron "*/5 * * * *"
echo $(date +%s) > /tmp/shoot-messages-start-time.txt
  1. 修改shoot-msg.sh,在开头加入超时判断:
#!/bin/bash

# 读取任务启动时间
START_TIME=$(cat /tmp/shoot-messages-start-time.txt)
CURRENT_TIME=$(date +%s)
# 72小时对应的秒数:72*60*60=259200
MAX_RUN_TIME=259200

# 计算已运行时长
ELAPSED_TIME=$((CURRENT_TIME - START_TIME))

if [ $ELAPSED_TIME -ge $MAX_RUN_TIME ]; then
  # 超过72小时,停止并删除任务
  pm2 delete shoot-messages
  # 清理临时文件
  rm /tmp/shoot-messages-start-time.txt
  exit 0
fi

# 下面是你原来的业务逻辑
echo "执行消息发送任务..."
# 你的业务代码...

这样每次Cron触发任务时,脚本都会先检查是否超时,一旦超过72小时就自动删除任务,之后不会再执行。

方案3:用系统Cron配合PM2命令

如果场景简单,也可以直接用系统定时任务来触发删除操作:

  1. 先计算72小时后的具体时间,转换成Cron格式,比如现在是2024-05-20 14:30,72小时后是2024-05-23 14:30,对应的Cron表达式是30 14 23 5 *,然后运行crontab -e添加:
30 14 23 5 * pm2 delete shoot-messages

如果需要动态计算时间(不用手动算),可以用脚本自动生成Cron任务:

# 计算72小时后的时间,转换成Cron格式(分 时 日 月 *)
CRON_TIME=$(date -d "+72 hours" +"%M %H %d %m *")
# 添加到系统Cron
echo "$CRON_TIME pm2 delete shoot-messages" | crontab -

在启动PM2任务的同时运行这个脚本,就能自动设置好72小时后的删除指令。


这三个方案各有优劣:方案1最灵活可控,方案2无需额外进程,方案3依赖系统Cron适合简单场景,你可以根据自己的需求选择~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 01:02:31