Крон-задачи для многосайтовой сетевой подсистемы с использованием только crontab и PHP?

Вопрос или проблема

У вас есть установка WordPress multisite с подкаталогами. Я пытаюсь настроить задания cron. Я знаю, что могу настроить для каждого сайта с помощью,

HTTP_HOST=sub.example.com php wp-cron.php > /dev/null

Но это не работает для подкаталогов. Я также знаю, что могу использовать wget или curl. Но есть ли способ сделать это с помощью php?

Изменение: Не дублирование предложенного вопроса, потому что я ясно указал, что у меня установка с подкаталогами. Ответы на тот вопрос в основном включают wp-cli и некоторые скрипты. Мне это не нужно.

Спасибо заранее.

Я не тестировал это, но если вы не хотите использовать WP-CLI и хотите использовать ТОЛЬКО задачи crontab, вам нужно добавить новую задачу crontab для каждого под-сайта, например:

curl -s https://example.com/[directory]/wp-cron.php > /dev/null 2>&1

Ссылка: https://vpsfix.com/7456/setup-proper-cron-jobs-wordpress-multisite-network/

Вы сказали, что ваши cron не работают для подкаталогов, но вы не предоставляете никакие сообщения об ошибках или объяснения, почему это не работает… однако, это должно работать, если вы следуете этому.

Я не думаю, что вы можете избежать использования wget/curl, если только вы не напишете пользовательский PHP-скрипт. Вы можете посмотреть это как пример:

https://sabrinazeidan.com/fixing-WordPress-multisite-cron/

Ответ или решение

Вопрос об организации крон задач для WordPress multisite является достаточно распространенным среди веб-разработчиков, работающих с платформой WordPress. Основная сложность заключается в настройке крон задач для сети сайтов, использующих подкаталоги в качестве структуры, что несколько отличается от мультисайтовой структуры с поддоменами. В данном ответе рассмотрим теорию, примеры и приложения (TEA), которые помогут решить данную задачу, используя только crontab и PHP, без применения WP-CLI или внешних инструментов вроде wget или curl.

Теория

Основная идея заключается в том, чтобы обеспечить выполнение WP-Cron (встроенного планировщика задач WordPress) для каждого сайта в мультисайтовой сети. WP-Cron активируется при посещении сайта пользователями или вызове определенных URL, таких как /wp-cron.php. Однако при использовании многосайтовой структуры с подкаталогами, требуется дополнительная настройка, поскольку крон-задачи, как правило, привязаны к определенным URL и сайтам.

Во многих случаях, при выполнении крон задач через проводник команд, необходимо учитывать корректную передачу CONTEXT (контекста) в форме переменной HTTP_HOST, что решает проблему для поддоменов, но не всегда для подкаталогов. В вопросе не решается задача определения точного URL для вызова крон задачи.

Пример

Использование crontab для подкаталогов характеризуется определёнными нюансами. В приведенном примере было упомянуто использование curl:

curl -s https://example.com/[directory]/wp-cron.php > /dev/null 2>&1

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

Например, вы можете создать скрипт PHP, который будет итерироваться по всем сайтам в мультисайтовой сети, корректно устанавливая контекст для каждого подкаталога, и затем вызывать wp-cron.php для каждого из них.

Вот шаблон такого скрипта:

<?php

$sites = ['site1', 'site2', 'site3']; // Массив всех сайтов в формате подкаталогов

foreach ($sites as $site) {
    $_SERVER['HTTP_HOST'] = 'example.com';
    $_SERVER['REQUEST_URI'] = '/' . $site . '/wp-cron.php';

    // Включаем и запускаем WordPress
    require('/path/to/wordpress/wp-load.php');

    // Запускаем WP-Cron
    wp_cron();
}

?>

Такой подход позволяет программисту задействовать только PHP и crontab, без необходимости в сторонних вызовах через командную строку.

Применение

После создания данного PHP-скрипта, вы можете добавить его в crontab. Допустим, ваш скрипт называется run-cron-jobs.php, добавьте следующую строку в crontab, чтобы запланировать его выполнение.

Шаги для добавления в crontab:

  1. Откройте crontab редактор с помощью:
crontab -e
  1. Вставьте строку для выполнения вышеописанного PHP-скрипта. Предположим, что PHP установлен по пути /usr/bin/php:
* * * * * /usr/bin/php /path/to/run-cron-jobs.php > /dev/null 2>&1

Эта строка планирует выполнение скрипта каждую минуту. Убедитесь, что настройка времени соответствует нуждам вашего проекта.

Заключение

Таким образом, вы можете организовать выполнение крон задач для подкаталоговой структуры WordPress multisite только через PHP и crontab, без использования инструментов вроде wget, curl, и без обращения к WP-CLI. Данный метод наиболее подходит для тех случаев, когда у вас есть доступ к местоположению вашего PHP-интерпретатора на сервере и возможность развертывания кастомных PHP скриптов. Таким образом, возможно достигнуть гибкости и полной функциональности в управлении крон задачами в мультисайтовой сети WordPress.

Оцените материал
Добавить комментарий

Капча загружается...