通过 wp-cli 和(非 WP)cron 触发单个 WordPress 计划操作

Triggering individual WordPress scheduled actions via wp-cli and (non-WP) cron

提问人:brettkelly 提问时间:11/15/2023 更新时间:11/15/2023 访问量:18

问:

我正在编写一个执行多个操作的插件,其中一个是解析和导入大型 Excel 电子表格的复杂例程(不要问)。我希望这个例程作为后台任务运行,使用插件,以避免 UI 缓慢和服务器超时。action-scheduler

具体来说,我想使用 和 服务器的 cron 而不是 WP-Cron 来运行此操作,因为当使用 WP-Cron 运行时,服务器会在处理大约一分钟后终止任务。wp-cli

这是我代码的突出部分(函数名称已更改):

从我的导入器类的__construct方法:

add_action(
    'myplugin_background_file_import', 
    array($this, 'my_long_import_routine'), 
    PHP_INT_MAX, // lowest possible priority
    8 // argument count
); 

// ignore this hook so I can run it via server cron

add_action('action_scheduler_before_execute', function ($action_id) {
    $action = ActionScheduler::store()->fetch_action($action_id);
    $hook = $action->get_hook();
    if ('myplugin_background_file_import' === $hook) {
        error_log('ActionScheduler — skipping action hook: ' . $hook);
        throw new Exception('Skipping this action as it is handled by server cron.');
    }
});

稍后,在另一种方法中,我这样将操作排入队列:

as_enqueue_async_action(
    'myplugin_background_file_import', 
    array(/* associative array of the 8 args previously mentioned */), 
    'my_group', 
    false, 
    255
);

任务调度工作正常(屏幕截图),操作正确过滤钩子,因此 WP-Cron 不会运行它。action_scheduler_before_execute

问题是当我运行此命令时,我没有得到预期的结果:

wp action-scheduler run --hooks="myplugin_background_file_import"

它会告诉我有多个任务在竞争(从几十个到几百个,取决于我何时运行它——它的变化是不可预测的),但无论我做什么,计划操作中的任务都保持“待处理”。

据我所知,我做的一切都是正确的。我错了吗?这里是否存在我遗漏的逻辑错误?这是我第一次认真使用,所以我绝对不排除用户错误。action-scheduler

任何意见将不胜感激;如果我遗漏了任何内容或可以添加更多上下文,请告诉我。谢谢!

wordpress cron

评论


答: 暂无答案