如果任何作业失败,Cron 作业会自动重试

我有一个每 5 小时运行一次的 cron 作业。它调用一个PHP脚本,这个脚本会调用一个外部 API 来同步一些数据。

问题是有时我会从 API 超时,并且作业会失败。

是否有任何机制让 cron 选项卡自动重试或自动恢复失败的作业?

我试图做一项额外的工作,并在手动发生任何故障时调用它。

这样做的最佳方法是什么?


鸿蒙传说
浏览 246回答 3
3回答

UYOU

Cron 只在特定时间或每分钟/小时/天等运行一次。它不检查返回码。所以这根本不是那么容易的peasy柠檬挤压......在我看来,你有几个选择如何做到这一点:创建某种调度程序,如果它失败,您可以再次编写您的 CRON 作业,在这种情况下,您将需要一个更多的 CRON 作业来读取您的调度程序并运行正确的命令。调度程序可以是基于数据库/文件/NoSQL 的。在调度程序中,您可以使用类似(bool) executedwhich 的标志,让调度程序知道哪些任务已经完成。失败时使用队列(例如 Rabbit)再次调用它自己。使用框架,我使用 Symfony 管理自己创建的命令以基于数据库执行它们(检查下面的第二个链接),还使用 enqueue/enqueue-bundle 包来管理 Symfony 中的队列。我认为,如果您对 PHP 不是那么先进,我建议您使用 Symfony 使用基于数据库(MySQL / PostgreSQL / NoSQL)的自制调度程序(检查下面的第二个链接)。在这种情况下,您只需SELECT从数据库中获取所有未执行的记录(命令)并运行它们。

千巷猫影

你可以做的是这样的:https://crontab.guru/#1_0-23_13__1 0-23 13 * *每月 13 日每小时 1 分钟后开始工作。“从第 13 天的 0 点到 23 点,每小时的第 1 分钟。”...然后在您的代码中,您将有一些逻辑来检测进程\脚本是否已经正确运行...如果是,请跳过运行尝试;否则让它运行,然后设置一个标志以检查后续尝试运行。希望你能明白。

qq_花开花谢_0

您可以使用 supervisord :监督网站或者在代码中处理 API 超时。
打开App,查看更多内容
随时随地看视频慕课网APP