提问人:brettkelly 提问时间:11/15/2023 更新时间:11/15/2023 访问量:18
通过 wp-cli 和(非 WP)cron 触发单个 WordPress 计划操作
Triggering individual WordPress scheduled actions via wp-cli and (non-WP) cron
问:
我正在编写一个执行多个操作的插件,其中一个是解析和导入大型 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
任何意见将不胜感激;如果我遗漏了任何内容或可以添加更多上下文,请告诉我。谢谢!
答: 暂无答案
评论