Запуск крона через вызов wp-cron.php из командной строки вместо wget?

26 авг. 2015 г., 10:16:57
Просмотры: 15.6K
Голосов: 9

Можно ли просто запустить wp-cron.php используя, например, $ php /путь/до/wordpress/wp-cron.php вместо использования метода с wget, например wget -q -O - http://example.com/wp-cron.php>/dev/null 2>&1?

2
Комментарии

Вопрос: Зачем вам может понадобиться делать это таким способом?

norman.lol norman.lol
25 мар. 2019 г. 22:22:04

@leymannx по многим причинам, возможно, в вашей системе нет wget? Задачи типа cron вообще не должны требовать веб-уровня, и вы должны иметь возможность запускать cron даже если весь сайт не работает.

Tuomas Valtonen Tuomas Valtonen
27 сент. 2019 г. 14:01:02
Все ответы на вопрос 2
6
10

Изучая документацию файла wp-cron.php, видно, что можно просто вызвать $ php wp-cron.php:

/**
 * Псевдо-CRON демон для планирования задач WordPress
 *
 * WP Cron запускается при посещении сайта. В случаях, когда сайт не получает
 * достаточного количества посещений для своевременного выполнения запланированных задач,
 * этот файл можно вызывать напрямую или через серверный
 * CRON демон определённое количество раз.
 *
 * Определение DISABLE_WP_CRON как true и прямой вызов этого файла
 * являются взаимоисключающими, при этом последний не зависит от первого для работы.
 *
 * HTTP-запрос к этому файлу не замедлит работу посетителя, который зашёл
 * в момент, когда требуется выполнение задачи cron.
 *
 * @package WordPress
 */

Кроме того, в командной строке можно использовать wp-cli для этих целей.

$ cd /path/to/wordpress
$ wp cron event run --due-now

Для принудительного запуска одного конкретного cron-события вне зависимости от его расписания выполните:

$ wp cron event run my_custom_cron_event

Или в виде однострочной команды для добавления в crontab, которая будет выполняться каждый час + 15 минут (14:15, 15:15, 16:15 и т.д.):

15 * * * * cd /path/to/wordpress && wp cron event run --due-now > /dev/null 2>&1
25 мар. 2019 г. 22:21:01
Комментарии

Есть ли преимущество в использовании curl по сравнению с инструментом wp cli?

Barry Chapman Barry Chapman
26 янв. 2020 г. 08:06:12

@BarryChapman – Curl по сути это просто ещё один запрос к странице. Так что при запуске крона это может немного замедлить работу сайта.

norman.lol norman.lol
26 янв. 2020 г. 17:56:34

@BarryChapman Полагаю, что любой код, зависящий от $_SERVER или других переменных сессии, не будет корректно работать при вызове из командной строки. В остальном проблем быть не должно.

alexg alexg
4 мар. 2021 г. 19:29:32

Стоит отметить, что wp-cli запускает cron через HTTP. Это определенно не то же самое, что вызов wp-cron из CLI PHP, потому что, например, max_execution_time может влиять на выполнение cron-задач. Если у вас возникают проблемы с таймаутами cron-задач, я рекомендую вызывать wp-cron.php напрямую, без использования wp-cli.

Gabor Garami Gabor Garami
15 мар. 2023 г. 11:40:05

@GaborGarami wp-cli выполняет HTTP-запрос из командной строки??

norman.lol norman.lol
16 мар. 2023 г. 12:42:32

Судя по моим тестам, да.

Gabor Garami Gabor Garami
13 окт. 2023 г. 13:45:06
Показать остальные 1 комментариев
2

Да, можно запускать кроны просто командой $ php /путь/до/wordpress/wp-cron.php.

Альтернативно можно использовать curl:

*/10 * * * * curl http://example.com/wp-cron.php > /dev/null 2>&1

Также вы можете добавить следующую строку в ваш wp-config.php, чтобы отключить выполнение крон-заданий через HTTP-запросы:

define('DISABLE_WP_CRON', true);
26 авг. 2015 г. 10:32:34
Комментарии

Если вы используете curl, это все равно HTTP-запрос, поэтому, вероятно, не стоит отключать DISABLE_WP_CRON?

Bananaapple Bananaapple
10 июл. 2020 г. 11:20:45

@Bananaapple – При прямом вызове wp-cron.php вы обходите это ограничение. Но в то же время DISABLE_WP_CRON предотвращает запуск cron при посещении любой страницы вашего сайта. Смотрите https://kinsta.com/knowledgebase/disable-wp-cron/ и комментарии в файле в моем ответе выше: Определение DISABLE_WP_CRON как true и прямой вызов этого файла исключают друг друга, и последний не зависит от первого для работы.

norman.lol norman.lol
10 июл. 2020 г. 11:45:04