Tengo una función que se ejecuta cada 5 minutos. Me he referido a continuación del códice:
<?php wp_schedule_event(time(), 'hourly', 'my_schedule_hook', $args); ?>
Quiero ejecutar esta función solo cada 5 minutos, independientemente de cuándo comenzar. ¿Cómo puedo esto?
También dice que el codex dice que cron se ejecutará cuando un visitante visite el sitio. ¿Hay alguna forma de ejecutar el cron solo por minutos y sin esperar una visita?
digamos que la siguiente función debe ejecutarse cada 5 minutos, entonces, ¿cómo puedo hacer eso usando wp_schedule_event()
o wp_cron
?
function run_evry_five_minutes(){
// codes go here
}
functions.php
Respuestas:
Puede crear nuevos horarios a través de cron_schedules:
Ahora puedes programar tu función:
Para programarlo solo una vez, envuélvalo en una función y verifique antes de ejecutarlo:
Tenga en cuenta el parámetro $ args! No especificar el parámetro $ args en wp_next_scheduled, pero tener $ args para wp_schedule_event hará que se programe un número casi infinito del mismo evento (en lugar de solo uno).
Finalmente, cree la función real que le gustaría ejecutar:
Creo que es importante mencionar que wp-cron está verificando la programación y ejecuta los trabajos programados debido cada vez que se carga una página.
Entonces, si tiene un sitio web de bajo tráfico que solo tiene 1 visitante por hora, wp-cron solo se ejecutará cuando ese visitante navegue por su sitio (una vez por hora). Si tiene un sitio de alto tráfico con visitantes que solicitan una página cada segundo, wp-cron se activará cada segundo causando una carga adicional en el servidor.
La solución es desactivar wp-cron y activarlo a través de un trabajo cron real en el intervalo de tiempo del trabajo wp-cron programado que se repite más rápido (5 min en su caso).
Lucas Rolff explica el problema y da la solución en detalle.
Como alternativa, puede utilizar un servicio gratuito de terceros como UptimeRobot para consultar su sitio (y activar wp-cron) cada 5 minutos, si no desea desactivar wp-cron y activarlo a través de un trabajo cron real.
fuente
Si su sitio recibe mucho tráfico, puede intentar usarlo
set_transient()
para ejecutarlo (aproximadamente) cada 5 minutos, por ejemplo:fuente
functions.php
cuando realizo una visita a la página, se actualizará una tabla de mi base de datosfunction run_evry_five_minutes() { $homepage = file_get_contents('link to visit'); echo $homepage; }
. Pero la tabla DB no se actualiza después de 6 minutos incluso.get_transient()
/set_transient()
sin el material cron hace mucho más sentido, mucho más simple, se actualizará respuesta ...Puede activarlo en la activación del complemento en lugar de en cada llamada del complemento:
fuente
Me temo que, aparte de esperar a que alguien visite su sitio que ejecuta una función, la única otra opción es configurar un trabajo cron en su servidor usando algo como esto /programming/878600/how -to-create-cronjob-using-bash o si tiene una interfaz de estilo cpanel en su servidor, a veces hay una interfaz gráfica de usuario para configurar esto.
fuente
functions.php
porque cuando la función está enplugin
ofunctions.php
no podemos pedir a los clientes que configuren un cron desde cpanel por su cuenta ..El complemento Cronjob Scheduler le permite ejecutar tareas frecuentes de manera confiable y oportuna sin que nadie tenga que visitar su sitio, todo lo que necesita es al menos 1 acción y un horario de Unix Crontab.
Es muy fácil de usar y muy flexible. Usted crea su propia función y define una acción dentro de ella. Luego, puede elegir su acción en el menú de complementos y activarla cuando lo desee.
fuente
Tengo una posible solución usando una función de programación y una función recursiva WP Ajax.
file_get_contents()
Si el contador es igual o superior a 60, reiniciará el contador y esperará el próximo trabajo cron.
Si el contador es múltiplo de 5 (entonces cada 5 minutos) ejecutará la función deseada
Y, además de las condiciones, dormirá durante 59 segundos
sleep(59);
(suponiendo que su función sea rápida). Después del sueño, se activaráfile_get_contents()
nuevamente.Cosas importantes a tener en cuenta:
set_time_limit(90);
para intentar evitar que el servidor rompa su función antes de dormirEs una solución, no es buena, y el servidor puede bloquearla. Usando un cron externo, puede configurar una función simple y el servidor usará recursos en él una vez cada 5 minutos. Con esta solución, el servidor utilizará recursos en él todo el tiempo.
fuente
La respuesta de @ johano explica correctamente cómo configurar un intervalo personalizado para el trabajo cronológico de WP. Sin embargo, la segunda pregunta no se responde, que es cómo ejecutar un cron cada minuto:
En el archivo
wp-config.php
, agregue el siguiente código:Agregue un trabajo cron (
crontab -e
en unix / linux):La primera parte (paso 1) deshabilitará el trabajo cron interno de WordPress. La segunda parte (paso 2) ejecutará manualmente el trabajo cron de WordPress cada minuto.
Con la respuesta de @ Johano (cómo ejecutar una tarea cada 5 minutos) y la mía (cómo ejecutar manualmente el cron), debería poder lograr su objetivo.
fuente