Поддержка Проблемы и решения Составление запроса в БД

  • Приветствую!
    Висят 30 тысяч отложенных страниц.
    Крон не работает. Перенес на другой хостинг, но там тоже самое.

    Придется все публиковать сразу.

    Как правильно составить запрос в БД, чтобы опубликовать сразу все отложенные статьи?

Просмотр 15 ответов — с 1 по 15 (всего 24)
  • Версия WordPress 4.9.9

    Модератор Yuri

    (@yube)

    Крон не работает.

    Не работает (падает по ошибке или что еще) или не вызывается?

    Шарахнуть по базе всегда успеется, разобраться с хроном важнее.

    Если я правильно понимаю, то крон должен работать без моего внедрения. Он просто не публикует страницы, которые отложены.

    Я уже перепробовал все, что нарыл в интернете.

    в wp-config.php помещал следующий код:
    define(‘DISABLE_WP_CRON’, true);
    define(‘ALTERNATE_WP_CRON’, true);

    Но это ни к чему не привело.

    Хостер сказал прописать в планировщике cron вот так:
    /usr/bin/php /var/www/userID/data/www/сайт/wp-cron.php

    Я прописал, но ничего не произошло.

    Установил плагин Scheduled Post Trigger для публикации пропущенных статей. Но он очень сильно грузит БД и вылазит ошибка 500.

    В сам файл wp-cron.php никаких изменений не вносил. Он стандартный.

    • Ответ изменён 5 лет, 3 месяца назад пользователем polubog.
    Модератор Yui

    (@fierevere)

    永子

    в wp-config.php помещал следующий код:
    define(‘DISABLE_WP_CRON’, true);
    define(‘ALTERNATE_WP_CRON’, true);

    вот этим вы его и отключили скорее всего, альтернативный cron имеет проблемы, по сравнению с обычным

    Обычный срабатывает при посещении вашего сайта посетителем, которому была отдана хотя бы одна незакешированная плагином страничного кеша страница.
    Это может происходить редко или вообще никогда, если сайт не посещают или он у вас полностью отдается из кеша.

    Сайт у меня посещают. Эти строчки я убрал, так как данный вариант не сработал.

    Модератор Yuri

    (@yube)

    Если я правильно понимаю, то крон должен работать без моего внедрения.

    Должен. Если всё нормально. У WP псевдокрон, который, если нужно движок сам вызывает POST-запросом, но для этого кто-то должен зайти на сайт.

    В access логе эти запросы видны, и виден результат (код возврата). Вглядит как-то так:
    127.0.0.1 - - [29/Dec/2018:03:46:43 +0100] "POST /wp-cron.php?doing_wp_cron=1546051603.0982670783996582031250 HTTP/1.0" 200 -

    200 — это и есть код. Хороший.

    define(‘DISABLE_WP_CRON’, true);

    Вот это и есть запрет внутреннего псевдохрона.

    /usr/bin/php /var/www/userID/data/www/сайт/wp-cron.php
    Я прописал, но ничего не произошло.

    Ничего — в смысле вообще хроновые задачи не отрабатываются или только не публикуются отложенные записи?

    для публикации пропущенных статей. Но он очень сильно грузит БД и вылазит ошибка 500.

    Публикация — это несколько больше, чем просто смена статуса поля post_status на publish, потому и грузит, если записей скопилось очень много. А может по какой-то другой причине, скажем, по той же, по которой не работает штатная отложенная публикация.

    Я считаю, что надо искать причину неработы хрона. Я бы поставил плагины для контроля за хроном (например, Cron Logger и WP Crontrol) и посмотрел, что вообще происходит.

    В логах вот такие ошибки выскакивают:
    [Sat Dec 29 19:13:10.366485 2018] [fcgid:warn] [pid 3394951] (104)Connection reset by peer: [client 185.212.130.14:36430] mod_fcgid: error reading data from FastCGI server, referer: https://site.com./wp-cron.php?doing_wp_cron=1546103585.6203401088714599609375
    [Sat Dec 29 19:13:10.366519 2018] [core:error] [pid 3394951] [client 185.212.130.14:36430] End of script output before headers: wp-cron.php, referer: https://site.com/wp-cron.php?doing_wp_cron=1546103585.6203401088714599609375

    Модератор Yui

    (@fierevere)

    永子

    надо посмотреть что пишет PHP, хотя скорее всего там просто таймаут за пределами max_execution_time

    А этот PHP где посмотреть?
    И как поправить max_execution_time?

    Извиняюсь, что лезу как «не профессионал», но если конкретно ответить на вопрос

    Как правильно составить запрос в БД, чтобы опубликовать сразу все отложенные статьи?

    — то разве в WP нельзя зайти в — страницы/записи — ожидают подтверждения или что-то тп — выбрать всё и подтвердить? А потом уже с Cron-ом разбираться?

    Модератор Yui

    (@fierevere)

    永子

    А этот PHP где посмотреть?
    И как поправить max_execution_time?

    оба этих вопроса стоит задавать в техподдержку хостинга

    — то разве в WP нельзя зайти в — страницы/записи — ожидают подтверждения или что-то тп — выбрать всё и подтвердить? А потом уже с Cron-ом разбираться?

    Можно! Но у меня там висит 30 тысяч статей, которые необходимо опубликовать. Когда я выбираю по 5-10 статей и меняю статус на опубликовать, то у меня выскакивает ошибка 500. Мне нужно пару раз перезагрузить страницу, прежде , чем все будет ок. Чтобы все опубликовать, мне нужно вручную будет 10 лет это делать.

    оба этих вопроса стоит задавать в техподдержку хостинга

    А ответ на вопрос топика вы знаете: «Как правильно составить запрос в БД, чтобы опубликовать сразу все отложенные статьи?»

    Модератор Yui

    (@fierevere)

    永子

    Публикация — это несколько больше, чем просто смена статуса поля post_status на publish

    а вот вам Юрий ответил по этому поводу.

    В принципе, если у вас есть доступ ssh к серверу, можно использовать запуск задач cron через wp-cli

    for EVENT_HOOK in $(wp cron event list --format=csv --fields=hook,next_run_relative --url="$SITE_URL" --path="$WP_PATH" | grep now$ | awk -F ',' '{print $1}')
    	do
    		wp cron event run "$EVENT_HOOK" --url="$SITE_URL" --path="$WP_PATH" --quiet
    done

    (cкрипт отсюда — https://bjornjohansen.no/wordpress-cron-wp-cli )

    Как правильно составить запрос в БД, чтобы опубликовать сразу все отложенные статьи?

    Вы про sql?
    UPDATE wp_posts SET post_status = 'publish' WHERE post_status = 'inherit'
    Этот запрос заставит все «неактивные записи» стать «публичными», только замените слово «inherit» на то, что у вас в бд, под тегом «Ожидания». На всякий случай в хостинге сделайте копию бд, чтобы ничего не сломать)
    P.s Если вы без изменений (без изменений inherit-а на «ожидания») скопируете и вставите себе в sql бд, то он «сломает» вашу бд и сайт, т.к там хранятся почти все страницы с момента создания (даже тех, которые не отображаются в движке) и это всё устроит «хаос», по этому внимательно прочтите.
    Надеюсь, куда код вставлять знаете)

Просмотр 15 ответов — с 1 по 15 (всего 24)
  • Тема «Составление запроса в БД» закрыта для новых ответов.