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

如何为cronjob失败任务添加4小时后自动重试逻辑

Cron任务失败后4小时重试Notebook实现方案

原生cron没有内置失败延迟重试的配置项,不用搜专门的cron参数,直接在执行层加逻辑就能实现,给你两个可直接用的方案:


方案1:基于at命令实现(推荐,可靠性高)

这个方案依赖系统自带的at一次性定时任务服务,不会占后台进程,机器重启任务也不丢。

  1. 先确认at服务可用,Debian/Ubuntu系执行apt install at && systemctl enable --now atd,CentOS/RHEL系执行yum install at && systemctl enable --now atd即可。
  2. 直接修改crontab配置,替换成下面的内容:
PATH=/opt/tljh/user/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
SHELL=/bin/bash

## test
05 23 * * * papermill ~/a.ipynb ~/a_output.ipynb || echo "papermill ~/a.ipynb ~/a_output.ipynb" | at now + 4 hours
05 23 * * * papermill ~/b.ipynb ~/b_output.ipynb || echo "papermill ~/b.ipynb ~/b_output.ipynb" | at now + 4 hours

逻辑说明

  • shell里||是短路执行符,只有前面的papermill命令执行失败(退出码非0)时,才会运行后面的重试逻辑
  • 重试逻辑是把需要重跑的命令传给at服务,由at服务在4小时后一次性执行对应命令,不会重复触发
  • 原有crontab里的PATH配置已经包含了papermill的安装路径,at执行时会继承这个PATH,不会出现找不到命令的问题

如果需要避免重试失败后无限循环提交任务,可以给每个任务加个重试次数标记,最多重试1次,改法如下:

05 23 * * * rm -f ~/.a_retry_mark && papermill ~/a.ipynb ~/a_output.ipynb || ( [ ! -f ~/.a_retry_mark ] && touch ~/.a_retry_mark && echo "papermill ~/a.ipynb ~/a_output.ipynb" | at now + 4 hours )
05 23 * * * rm -f ~/.b_retry_mark && papermill ~/b.ipynb ~/b_output.ipynb || ( [ ! -f ~/.b_retry_mark ] && touch ~/.b_retry_mark && echo "papermill ~/b.ipynb ~/b_output.ipynb" | at now + 4 hours )

正常每日定点跑任务时会先清空旧的重试标记,第一次失败后打标记提交重试,重试时如果再失败,因为标记已经存在,不会再提交新的重试任务,不会出现任务无限堆积的问题。


方案2:shell包装脚本实现(无额外依赖)

不想装at服务的话可以写个简单的包装脚本,但是可靠性差一点,4小时等待期内如果机器重启,重试任务会直接丢失。

  1. 新建脚本~/run_papermill.sh,写入以下内容:
#!/bin/bash
NOTEBOOK_PATH=$1
OUTPUT_PATH=$2
# 执行原任务
papermill "$NOTEBOOK_PATH" "$OUTPUT_PATH"
if [ $? -ne 0 ]; then
    # 失败后等4小时重试
    sleep 14400
    papermill "$NOTEBOOK_PATH" "$OUTPUT_PATH"
fi
  1. 给脚本加执行权限:chmod +x ~/run_papermill.sh
  2. 修改crontab任务为调用脚本:
PATH=/opt/tljh/user/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
SHELL=/bin/bash

## test
05 23 * * * ~/run_papermill.sh ~/a.ipynb ~/a_output.ipynb
05 23 * * * ~/run_papermill.sh ~/b.ipynb ~/b_output.ipynb

这个方案的缺点是等待重试的4小时里脚本会一直占着一个系统进程,适合任务量小、机器不会随便重启的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 02:33:08