运行 在 MYSQL 中执行其他 cron 作业计划的 cron 作业

Run a cron job that performs other cron jobs schedules in MYSQL

我的系统 运行 每天两次进行一些密集的 cron 作业。

这些都是冗长的脚本。

偶尔,在我的系统中执行的操作需要 cron 作业按需 运行。

我的想法是创建一个主 cron 作业来检查我的数据库中的 table 计划事件,并根据需要 运行 发送它们。

现在,这一切听起来太简单了,所以我问:这是个好主意吗?有什么潜在的缺点或陷阱吗?

既然你提到了 PHP,也许你可以用它添加 cron 作业。 常规 shell 命令可以解决问题。

Occasionally, an action is performed in my system that requires the cron job to run on demand.

如果您可以访问 PHP 文件中的 system()exec() 函数,您可以添加 cron 作业并在必要时检查重复项

(crontab -l ; echo "0 * * * * stuff") | sort - | uniq - | crontab -

这应该将 stuff 添加到用户的 crontab 文件中并检查唯一性以避免重复。

如果您接受最小的 cron-job 间隔(一分钟),那么您的方法就可以了。我假设您将 on-demand 作业存储在数据库的一个 table 中,在这种情况下,您还需要考虑以下事项:

  1. 您需要将 on-demand 个作业标记为 in progress 以避免 on-demand 个作业花费超过一分钟并且也被下一个作业拾取的情况
  2. 您还可以考虑重试失败的作业,或处理脚本失败的作业(无论出于何种原因崩溃或被系统杀死)

如果需要尽快处理on-demand个动作,并且你还想处理以上两项,那么你可以考虑使用作业调度方法,比如使用RabbitMQ。与基于 cron 的方法相比,这种方法的学习曲线有点陡峭,但是最大的优点是一旦你安排了工作,你就不需要太在意它,除了告诉 job scheduler如何 运行 它。