Jun 11 2011

WordPress: ошибка 499 wp-cron.php в связке Apache + Nginx

Category: Wodpressingvar @ 22:03

После того, как запланированные посты в WordPress не опубликовались вовремя, были исследованы логи сервера и было замечено, что при обращении к файлу wp-cron.php состояние HTTP ответов было не 200, как положено, а 499:

"POST /wp-cron.php?doing_wp_cron HTTP/1.0" 499

На сервере используется связка Apache + Nginx. Как оказалось, Nginx не перенаправлял запрос на Apache, если соединение было закрыто слишком быстро – раньше, чем сервер успел прочесть заголовки.

Как следствие планировщик не запускался и различные задачи не выполнялись.

Ситуацию можно исправить, отредактировав файл wp-includes/cron.php.

Было:

function spawn_cron( $local_time = 0 ) {
...
  wp_remote_post( $cron_url, array('timeout' => 0.01, 'blocking' => false, 'sslverify' => apply_filters('https_local_ssl_verify', true)) );

Стало:

function spawn_cron( $local_time = 0 ) {
...
  wp_remote_post( $cron_url, array('timeout' => 5, 'blocking' => false, 'sslverify' => apply_filters('https_local_ssl_verify', true)) );

  usleep(5000000); //5 sec wait for nginx

Изменили время “timeout” до 5 секунд и поставили задержку 5 секунд с помощью функции usleep.

Дополнительный материал:

Tags: ,

{"code":"internal_server_error","message":"

There has been a critical error on this website.<\/p>

Learn more about troubleshooting WordPress.<\/a><\/p>","data":{"status":500,"error":{"type":1,"message":"Uncaught TypeError: count(): Argument #1 ($value) must be of type Countable|array, null given in \/var\/www\/tigor.com.ua\/public\/blog\/wp-content\/plugins\/post-plugin-library\/common_functions.php:176\nStack trace:\n#0 \/var\/www\/tigor.com.ua\/public\/blog\/wp-content\/plugins\/similar-posts\/similar-posts.php(169): ppl_expand_template()\n#1 \/var\/www\/tigor.com.ua\/public\/blog\/wp-content\/plugins\/similar-posts\/similar-posts.php(36): SimilarPosts::execute()\n#2 \/var\/www\/tigor.com.ua\/public\/blog\/wp-content\/themes\/stardust\/single.php(47): similar_posts()\n#3 \/var\/www\/tigor.com.ua\/public\/blog\/wp-includes\/template-loader.php(106): include('...')\n#4 \/var\/www\/tigor.com.ua\/public\/blog\/wp-blog-header.php(19): require_once('...')\n#5 \/var\/www\/tigor.com.ua\/public\/blog\/index.php(17): require('...')\n#6 {main}\n thrown","file":"\/var\/www\/tigor.com.ua\/public\/blog\/wp-content\/plugins\/post-plugin-library\/common_functions.php","line":176}},"additional_errors":[]}