У меня WordPress Multisite с несколькими сайтами. Я настроен DISABLE_WP_CRON
на true
мой wp-config.php
.
Если мы настроим задачу cron с помощью wget или curl, у нас будет правило 30 секунд для выполнения PHP-скрипта. Это так мало, чтобы отправлять тонны уведомлений по электронной почте и делать другие вещи (возможно, подключение к удаленному SMTP-серверу медленное, может быть, это действительно огромная куча уведомлений по электронной почте от bbPress или чего-то еще).
Может быть, мы можем использовать что-то вроде этого?
php -q wp-cron.php
Но он запускает cron только для одного сайта в Multisite (каждый сайт имеет свои собственные задачи cron в разных таблицах MySQL).
PS На форуме wpmudev.org я нашел странное «решение», в котором также используется Curl.
Другой PS WP CLI имеет отличные wp cron
команды, но он позволяет запускать задачи cron только вручную (да, мы можем использовать --url
attr). Например:
wp cron event list --url=multisite.com
wp cron event list --url=subdomain.multisite.com
WP-CLI
основной код?wp
/ WP-CLI в вашемPATH
? Если да, почему бы не вызвать это из bash-файла, запущенного в cron?Ответы:
Я думаю, что лучший способ - это использовать WP-CLI, но для этого вам нужно написать скрипт bash. Вот тот, который должен сделать это для вас:
Затем вам нужно добавить этот скрипт в crontab и запускать его каждую минуту, если хотите
источник
wp cron event run --due-now --url="$SITE_URL" --path="$WP_PATH
- Согласноrun
документам, вы должны использовать--due-now
флаг. Это уменьшит количество поисков и отдельных событий. Смотрите: wp-cli.org/commands/cron/event/run . В любом случае, я с @OmarJackman - он использует командную строку для использования инструментов командной строки WordPress. Реквизит для чистого примера Bash. Вы можете завершить этот ответ, показав запись в crontab.WP_PATH="/path/to/wp"; for SITE_URL in $(wp site list --fields=domain,path,archived,deleted --format=csv --path="$WP_PATH" | grep ",0,0$" | awk -F ',' '{print $1 $2}'); do wp cron event run --due-now --url="$SITE_URL" --path="$WP_PATH"; done
После того, как вы добавили константу в
wp-config.php
WP-CLI
И при условии, что у вас
config.yml
правильно настроены настройки, вы можете опустить--path
флаг при вызовеcron run
.Чтобы выполнить все задачи cron по порядку:
function run_crons_due_now_in_order { for SITE_URL in $(wp site list --fields=url --format=csv | tail -n +2 | sort); do wp cron event run --due-now --url="$SITE_URL" && echo -e "\t+ Finished crons for $SITE_URL"; done; echo "Done"; }; run_crons_due_now_in_order;
Если вы хотите, чтобы они запускались одновременно (сначала запустите cron, не зависящий от сайта):
function run_all_crons_due_now { for SITE_URL in $(wp site list --fields=url --format=csv | tail -n +2 | sort); do wp cron event run --due-now --url="$SITE_URL" && echo -e "\t+ Finished crons for $SITE_URL" & done; wait $(jobs -p); echo "Done"; }; run_all_crons_due_now;
Вы хотели бы поместить любой вариант в исполняемый файл
добавить задачу crontab
и, вероятно, выполнить каждую минуту
Если вы хотите запустить пользовательскую команду из cron, вам может потребоваться указать полные пути для работы wp-cli .
PHP
Единственная причина, по которой вам нужно загрузить WordPress, - это собирать URL-адреса из базы данных, а не использовать заранее определенный список. Мы собираемся пинговать только те URL-адреса, и нам все равно, какой ответ.
И добавить один звонок к вашему
custom-cron.php
в crontabисточник
Проще один вкладыш с меньшим количеством ошибок:
wp site list --field=url | xargs -i -n1 wp cron event run --due-now --url="{}"
Вы можете запустить его вручную или поместить в скрипт и вызвать его из cron, как и в других ответах.
источник
Это мое решение:
Мы называем это из crontab, надеюсь, это поможет
источник
Я думаю, что вы должны сказать нам, что вы подразумеваете под "запустить wp-cron.php правильный путь" в первую очередь. Согласно Wordpress, нет смысла отключать wp-cron и все же хотеть, чтобы он работал ... С точки зрения Linux, wget-ing или / bin / php-ing wp-cron.php будет правильным, но кажется, ваш конкретный хост ограничивает количество вызовов php по соображениям безопасности? - эта часть не совсем понятна из вашего описания.
Другой вопрос: сколько писем "тонна"? Есть веские причины, почему вы не должны пытаться отправить слишком много писем так быстро.
Возможно, вам придется пересмотреть свои цели.
(Я бы прокомментировал вместо ответа, но у меня недостаточно репутации на wpstack.)
источник
DISABLE_WP_CRON
отключать этот метод при настройке более надежного системного метода cron.