Вопрос или проблема
Итак, я хочу запустить функцию в моем плагине из crontab. В качестве примера, я хочу запустить её каждый день в 1:10 ночи.
function my_cronjob_action () {
// эта функция в моем плагине
// код для выполнения при запуске cron
syslog(LOG_DEBUG, 'выполнено unix cron');
} add_action('my_cronjob_action', 'my_cronjob_action');
Я отключил wp-cron, добавив define( 'DISABLE_WP_CRON', true );
в wp-config.php. Каков следующий шаг, чтобы функция могла быть выполнена из crontab?
Спасибо заранее.
Я нашел отличное решение здесь: Запуск пользовательского плагина wordpress с помощью linux cron
Мой путь был /usr/bin/wp, так что проверьте ваш сервер.
Вы можете просто добавить вашу функцию в файл, и используя скрипт wp bin, вам не нужно добавлять ничего в ваш php файл для использования функций WordPress.
Мне удалось запустить это из SSH / putty, но в настоящее время я не могу заставить это работать как cron задачу. Я обновлю, если пойму, как.
Решение, к которому я пришел здесь, выглядит следующим образом:
- Установил WP-CLI и воспользовался командой eval-file.
- Преобразовал мой плагин wordpress в отдельный скрипт.
- В отдельном скрипте я инициировал wordpress, чтобы не пришлось изменять большинство из него. Я просто удалил свои хуки активации и другой код, специфичный для плагина wordpress.
- Моя финальная строка cron выглядела так:
/usr/local/bin/wp –path=”/var/www/vhosts/path/to/site/” eval-file /var/www/vhosts/path/to/site/and/file/location/standalone-cron-send-email.php- В целях безопасности я добавил это в верхнюю часть скрипта, чтобы внешние злоумышленники не могли запустить скрипт. Только WP-CLI может запустить скрипт, в противном случае сообщение о том, что он предназначен для выполнения из командной строки, возвращается в браузер.
if( php_sapi_name() !== ‘cli’ ) { die(“Предназначено для выполнения из командной строки”); }
Ответ или решение
Чтобы выполнить функцию плагина WordPress с помощью cron в Linux, вам потребуется выполнить ряд шагов. Ниже описан процесс, который поможет вам осуществить это, учитывая, что вы отключили wp-cron, добавив строку define( 'DISABLE_WP_CRON', true );
в файл wp-config.php.
Шаг 1: Установка WP-CLI
WP-CLI (WordPress Command Line Interface) позволяет вам управлять WordPress базой данных и выполнять команды непосредственно из командной строки. Убедитесь, что WP-CLI установлен на вашем сервере, проверив команду:
/usr/local/bin/wp --info
Если он не установлен, вы можете установить его, следуя инструкциям на официальном сайте WP-CLI.
Шаг 2: Создание исполняемого PHP-скрипта
Для того чтобы ваша функция могла быть выполнена через cron, создайте отдельный PHP-скрипт, который будет инициализировать WordPress и вызывать вашу функцию. Например, создайте файл standalone-cron-job.php
в каталоге вашего плагина:
<?php
if (php_sapi_name() !== 'cli') {
die("Meant to be run from command line");
}
// Подключаем файл конфигурации WordPress
require('/path/to/your/wordpress/wp-load.php'); // Убедитесь, что путь правильный
// Вызываем вашу функцию
do_action('my_cronjob_action');
Шаг 3: Настройка Cron
Теперь, когда у вас есть скрипт, который инициирует WordPress и вызывает вашу функцию, вам нужно настроить cron, чтобы запускать этот скрипт в нужное время. Используйте команду crontab -e
для редактирования ваших cron задач и добавьте строку:
10 1 * * * /usr/local/bin/wp --path="/var/www/vhosts/path/to/site/" eval-file /path/to/your/standalone-cron-job.php
Пояснение к командам cron
10 1 * * *
— означает, что задача будет выполняться ежедневно в 1:10 ночи./usr/local/bin/wp --path="/var/www/vhosts/path/to/site/"
указывает путь к вашему установленному WP-CLI и к директории установки WordPress для того, чтобы скрипт мог получить доступ к функциям WP.eval-file /path/to/your/standalone-cron-job.php
— указывает пути к вашему созданному скрипту.
Шаг 4: Проверка лога
Для подтверждения успешного выполнения функции вы можете использовать syslog или добавить код для логирования в ваш скрипт. Убедитесь, что вы настраиваете уровни логирования и права доступа для файлов и директорий, чтобы предотвратить несанкционированный доступ.
Заключение
С помощью этой инструкции вы сможете запускать функцию вашего плагина WordPress через cron, обойдя механизмы wp-cron. Обязательно протестируйте ваш cron, запуская его вручную, чтобы убедиться, что все работает корректно. Такое эффективное управление функциями вашего WordPress плагина через cron позволяет автоматизировать задачи и улучшить функциональность вашего веб-сайта.
Если у вас есть дополнительные вопросы или проблемы с настройкой, не стесняйтесь обращаться за помощью на форумы поддержки WordPress или другие профессиональные ресурсы.