在同一数据库上运行多个实例时的Cron作业

时间:2020-09-24 作者:miked

我有一个用户使用我的插件,该插件有多个AWS实例托管WP并指向同一个数据库。我的插件的工作之一就是运行大量的小作业。

我在考虑使用wp_schedule_single_event 安排作业,但我不确定如何处理多个实例。每个作业都有唯一的参数,因此不会有任何重复。

Question:每个实例是否会尝试运行相同的作业,或者WordPress是否能够解决此问题,以便每个作业只运行一次?

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

问题:每个实例是否会尝试运行相同的作业

对如果有5台机器运行同一个站点,它们都会尝试运行cron作业。这将是不一致的,但如果机器1触发WP Cron,并且有一个事件准备运行,而机器2触发WP Cron,那么如果时间正确,机器2也将看到该事件并尝试处理它。

或者WordPress能够解决这个问题,使每个作业只运行一次?

不,它不能。你可以尝试添加某种类型的锁,但它不能解决问题,只能在某些情况下防止它

您真正需要的是在配置中禁用WP Cron,并在一台机器上通过系统级Cron作业运行它。或者更好的是,安装一个cron服务,比如cavalcade

相关推荐

多个cron作业与每天做多件事情的cron作业?哪一种能产生更好的性能和可扩展性?

我在WordPress中有一些用户可以注册的事件。我想在活动当天访问某些内容。因此,我有两种可能的方法:每次用户注册事件时,我都会在事件发生当天安排一个WP cron作业事件,让他们能够访问受限制的内容。或者,为用户标记他们选择的事件的日期,并运行每日WP cron作业,该作业检查所有用户,如果用户上的日期与当前日期匹配,则允许他们访问受限制的内容。因为我是个新手,哪种方法更好(性能、可扩展性等)?也许还有第三个更好的解决方案,我还没有想到:)