【发布时间】:2019-01-05 17:16:22
【问题描述】:
我已经尝试过这个解决方案,但我无法让它工作:
这是我的例子:
//this is for testing purposes
function my_cron_schedules($schedules){
if(!isset($schedules["1min"])){
$schedules["1min"] = array(
'interval' => 60,
'display' => __('Once a minute'));
}
return $schedules;
}
add_filter('cron_schedules','my_cron_schedules');
if ( ! wp_next_scheduled( 'my_scheduled_event' ) ) { wp_schedule_event(
strtotime( '2019-01-04 19:39:00' ), '1min', 'my_scheduled_event' ); }
add_action( 'my_scheduled_event', 'update_ratings' );
function update_ratings() {
//do some stuff..
}
【问题讨论】:
-
作为记录,您链接的答案指出“此外,需要了解 wp_cron 是由页面加载触发的,因此如果您的网站没有大量流量,那么该功能将不会” t 在定义的时间精确触发。不过有解决方法。换句话说,这实际上不是由 cron 本身触发的,而是通过加载相关页面来触发的。除非有人在计划间隔过后访问该页面,否则这不会运行。
-
如果您想保证每分钟触发一次预定的事件,您将不得不在服务器上实际启用 cron 本身并编辑 crontab。 PHP 绝对无法自行处理。任何纯粹基于 PHP 的解决方案都需要手动运行 PHP 脚本。您当前的解决方案需要定期的网络流量。
-
感谢您的回答。我已经测试过了,但它不起作用。 1 分钟时间表仅用于测试目的。我最初的计划是每天在特定时间安排一次。
-
间隔是1分钟还是1天都没有关系。问题是,即使您正确安排了代码,它也不会运行,除非有人手动触发脚本运行。如果您希望脚本在该时间运行,则需要有人在您希望脚本运行的确切时间访问该页面。你无法解决这个问题。这是一个内置的限制。唯一的解决方法是编辑服务器的
crontab。 -
要么是人需要触发脚本,要么是机器需要触发。如果需要,您可以在另一台机器上设置一个 cron 作业,以便在计划时间访问特定页面。那会奏效。但是你不能让它只用 PHP 单独运行。