运行 在 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 中,在这种情况下,您还需要考虑以下事项:
- 您需要将
on-demand
个作业标记为 in progress
以避免 on-demand
个作业花费超过一分钟并且也被下一个作业拾取的情况
- 您还可以考虑重试失败的作业,或处理脚本失败的作业(无论出于何种原因崩溃或被系统杀死)
如果需要尽快处理on-demand
个动作,并且你还想处理以上两项,那么你可以考虑使用作业调度方法,比如使用RabbitMQ
。与基于 cron
的方法相比,这种方法的学习曲线有点陡峭,但是最大的优点是一旦你安排了工作,你就不需要太在意它,除了告诉 job scheduler
如何 运行 它。
我的系统 运行 每天两次进行一些密集的 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 中,在这种情况下,您还需要考虑以下事项:
- 您需要将
on-demand
个作业标记为in progress
以避免on-demand
个作业花费超过一分钟并且也被下一个作业拾取的情况 - 您还可以考虑重试失败的作业,或处理脚本失败的作业(无论出于何种原因崩溃或被系统杀死)
如果需要尽快处理on-demand
个动作,并且你还想处理以上两项,那么你可以考虑使用作业调度方法,比如使用RabbitMQ
。与基于 cron
的方法相比,这种方法的学习曲线有点陡峭,但是最大的优点是一旦你安排了工作,你就不需要太在意它,除了告诉 job scheduler
如何 运行 它。