У меня есть функция, которая будет запускаться каждые 5 минут. Я сослался на следующее из кодекса:
<?php wp_schedule_event(time(), 'hourly', 'my_schedule_hook', $args); ?>
Я хочу запускать эту функцию только каждые 5 минут независимо от того, когда начинать. Как я могу это?
Также в кодексе говорится, что cron будет запущен, когда посетитель посетит сайт. Есть ли способ запустить cron так же, как за минуты и не дожидаясь посещения?
скажем, следующую функцию следует запускать каждые 5 минут, тогда как я могу это сделать с помощью wp_schedule_event()
или wp_cron
?
function run_evry_five_minutes(){
// codes go here
}
functions.php
Ответы:
Вы можете создать новое расписание с помощью cron_schedules:
Теперь вы можете запланировать свою функцию:
Чтобы запланировать это только один раз, оберните его в функцию и проверьте перед запуском:
Обратите внимание на параметр $ args! Не указав параметр $ args в wp_next_scheduled, но имея $ args для wp_schedule_event, будет запланировано почти бесконечное число одного и того же события (вместо одного).
Наконец, создайте фактическую функцию, которую вы хотели бы запустить:
Я думаю, что важно упомянуть, что wp-cron проверяет расписание и запускает запланированные задания каждый раз при загрузке страницы.
Таким образом, если у вас есть сайт с низким трафиком, у которого всего 1 посетитель в час, wp-cron будет работать только тогда, когда этот посетитель просматривает ваш сайт (один раз в час). Если у вас сайт с большим трафиком, и посетители просят страницу каждую секунду, wp-cron будет срабатывать каждую секунду, вызывая дополнительную нагрузку на сервер.
Решение состоит в том, чтобы деактивировать wp-cron и запустить его через реальное задание cron за тот промежуток времени, когда вы выполняете самое быстрое повторение запланированного задания wp-cron (в вашем случае 5 минут).
Лукас Ролф объясняет проблему и дает решение в деталях.
В качестве альтернативы вы можете использовать бесплатный сторонний сервис, такой как UptimeRobot, для запроса вашего сайта (и запуска wp-cron) каждые 5 минут, если вы не хотите деактивировать wp-cron и запускать его с помощью реального задания cron.
источник
Если ваш сайт получает большой трафик, вы можете попробовать использовать
set_transient()
его (очень приблизительно) каждые 5 минут, например:источник
functions.php
когда визит сделать на странице, обновление будет сделано в таблице в моей базе данных ..function run_evry_five_minutes() { $homepage = file_get_contents('link to visit'); echo $homepage; }
. Но таблица БД не обновляется даже через 6 минут.get_transient()
/set_transient()
без использования cron, гораздо больше смысла, намного проще, обновит ответ ...Вы можете запустить его при активации плагина, а не при каждом вызове плагина:
источник
Я боюсь, что кроме ожидания того, чтобы кто-то посетил ваш сайт, который запускает функцию, единственный другой вариант - это создать на своем сервере задание cron, используя что-то вроде этого /programming/878600/how. -to-create-cronjob-using-bash или если у вас есть интерфейс в стиле cpanel на вашем сервере, иногда есть графический интерфейс для настройки этого.
источник
functions.php
потому что, когда функция находится вplugin
или в,functions.php
мы не можем просить клиентов установить крон из cpanel самостоятельно ..Cronjob Планировщик плагин позволяет запускать частые задачи надежно и своевременно без любого имеющего посетить ваш сайт, все , что вам нужно , по крайней мере , 1 действие и график Unix Crontab.
Он очень прост в использовании и очень гибкий. Вы создаете свою собственную функцию и определяете действие внутри нее. Затем вы можете выбрать действие из меню плагинов и запускать его в любое время.
источник
У меня есть возможное решение, используя функцию расписания и рекурсивную функцию WP Ajax.
file_get_contents()
Если счетчик равен или выше 60, он сбрасывает счетчик и ожидает следующего задания cron.
Если счетчик кратен 5 (то есть каждые 5 минут), он выполнит желаемую функцию
И, помимо условий, он будет спать в течение 59 секунд
sleep(59);
(при условии, что ваша функция быстрая). После сна он снова запуститсяfile_get_contents()
.Важные вещи, на которые стоит обратить внимание:
set_time_limit(90);
функцию, чтобы предотвратить нарушение работы сервера перед сном.Это решение, а не хорошее, и оно может быть заблокировано сервером. Используя внешний cron, вы можете установить простую функцию, и сервер будет использовать ресурсы один раз каждые 5 минут. Используя это решение, сервер будет использовать ресурсы на нем все время.
источник
Ответ @ johano правильно объясняет, как настроить пользовательский интервал для задания cron WP. Однако на второй вопрос нет ответа: как запускать cron каждую минуту:
В файле
wp-config.php
добавьте следующий код:Добавить задание cron (
crontab -e
в unix / linux):Первая часть (шаг 1) отключит внутреннее задание WordPress cron. Вторая часть (шаг 2) будет запускать задание WordPress cron вручную каждую минуту.
С ответом @ Johano (как запускать задачу каждые 5 минут) и моим (как вручную запускать cron) вы сможете достичь своей цели.
источник