如何在cronjob中为失败的job添加重试逻辑?



我用下面的语法安排了一个cronjob,它工作得很好。代码如下所示。但是我需要添加一个功能,如果工作失败,在4小时后重试该笔记本。

我没有在谷歌上找到解决方案。有人能帮我看一下吗?

非常感谢。

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
05 23 * * * papermill ~/b.ipynb ~/b_output.ipynb

Cron本身不支持这样的操作。您可以将脚本封装到shell脚本中,并添加cron作业以在4小时标记处进行检查:

(假设你的程序使用了错误码)

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 * * * if papermill ~/a.ipynb ~/a_output.ipynb; then rm -f /tmp/job_previously_failed; else  touch /tmp/job_previously_failed; fi
05 03 * * * if [ -f /tmp/job_previously_failed ]; then papermill ~/a.ipynb ~/a_output.ipynb; rm -f /tmp/job_previously_failed; fi
05 23 * * * if ~/b.ipynb ~/b_output.ipynb; then rm -f /tmp/job_previously_failed; else  touch /tmp/job_previously_failed; fi
05 03 * * * if [ -f /tmp/job_previously_failed ]; then ~/b.ipynb ~/b_output.ipynb; rm -f /tmp/job_previously_failed; fi

强烈建议您将它们移动到单独的脚本文件中,而不是在cron中内联地编写所有这些内容。很快就会乱的。

最新更新