У меня проблема с получением запланированного события для выполнения. Тестовый код ниже.
У меня настроено linux cronjob, так как я тестирую.
*/2 * * * * wget http://example.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1
Я установил до 2 минут для тестирования.
//set custom schedule
function my_cron_schedules($schedules){
if(!isset($schedules["2min"])){
$schedules["2min"] = array(
'interval' => 2*60,
'display' => __('Once every 2 minutes'));
}
return $schedules;
}
add_filter('cron_schedules','my_cron_schedules');
if (defined('DOING_CRON ') && DOING_CRON) {
file_put_contents("test.log", "Doing cron!!\n", FILE_APPEND);
} else {
file_put_contents("test.log", "NOT Doing cron!!\n", FILE_APPEND);
}
// check if has schedule
file_put_contents("test.log", 'Has scheduled event: '.(wp_next_scheduled('run_my_test')?'true':'false')."\n", FILE_APPEND);
file_put_contents("test.log", 'ret: '.print_r(wp_next_scheduled('run_my_test'),true)."\n", FILE_APPEND);
if (wp_next_scheduled('run_my_test') !== false) {
file_put_contents("test.log", 'ret: '.date('Y-m-d H:i:s', wp_next_scheduled('run_my_test'))."\n", FILE_APPEND);
// if scheduled time is old clear it
if (wp_next_scheduled('run_my_test') < time()) {
file_put_contents("test.log", "Clearing old schedule\n", FILE_APPEND);
wp_clear_scheduled_hook( 'run_my_test' );
}
}
// create hook
add_action( 'run_my_test', 'my_test_function', 10);
function my_test_function() {
file_put_contents("test.log", "run event\n", FILE_APPEND);
}
// create schedule
if (wp_next_scheduled('run_my_test') ===false || wp_next_scheduled('run_my_test') < strtotime(date())) {
file_put_contents("test.log", "attempt schedule event\n", FILE_APPEND);
$ret = wp_schedule_event(time()+60, '2min', 'run_my_test');
file_put_contents("test.log", ($ret)?'set event'."\n":'failed set event'."\n", FILE_APPEND);
}
Это то, что происходит, когда срабатывает linux cron.
NOT Doing cron!!
Has scheduled event: true
ret: 1596571770
ret: 2020-08-04 20:09:30
Clearing old schedule
attempt schedule event
set event
NOT Doing cron!!
Has scheduled event: true
ret: 1596571850
ret: 2020-08-04 20:10:50
Кажется, что вызов cron никогда не запускается , даже если wget возвращает ok
Все, что он когда-либо делает, это перемещает запланированное событие вверх по времени. Он никогда не запускает функцию ловушки.
Может ли кто-нибудь сказать мне, что я делаю не так?