Tengo WordPress Multisite con varios sitios. He definido DISABLE_WP_CRON
a true
en mi wp-config.php
.
Si configuramos la tarea cron con wget o curl, tenemos una regla de 30 segundos para ejecutar el script PHP. Es muy pequeño enviar toneladas de notificaciones por correo electrónico y hacer otras cosas (tal vez la conexión remota del servidor SMTP es lenta, tal vez es realmente un montón enorme de notificaciones por correo electrónico de bbPress o algo así).
¿Quizás podamos usar algo como esto?
php -q wp-cron.php
Pero solo ejecuta cron en un sitio en Multisitio (cada sitio tiene sus propias tareas cron en diferentes tablas MySQL).
PD: En el foro wpmudev.org encontré una extraña "solución" que también usa Curl.
Otra PS WP CLI tiene wp cron
comandos increíbles , pero solo permite ejecutar tareas cron manualmente (sí, podemos usar --url
attr). Por ejemplo:
wp cron event list --url=multisite.com
wp cron event list --url=subdomain.multisite.com
WP-CLI
código central?wp
/ WP-CLI en tuPATH
? En caso afirmativo, ¿por qué no activarlo desde un archivo bash que se ejecuta en cron?Respuestas:
Creo que la mejor manera es usar WP-CLI, pero necesitarías escribir un script bash para hacer esto. Aquí hay uno que debería hacerlo por usted:
Luego, deberá agregar este script a crontab y ejecutarlo tal vez cada minuto si lo desea
fuente
wp cron event run --due-now --url="$SITE_URL" --path="$WP_PATH
- Según losrun
documentos, debe utilizar la--due-now
bandera. Esto reduciría las búsquedas y las llamadas a eventos individuales. Ver: wp-cli.org/commands/cron/event/run . De cualquier manera, estoy con @OmarJackman: está utilizando la línea de comandos para usar las herramientas de línea de comandos de WordPress. Accesorios para un ejemplo limpio de Bash. Puede completar esta respuesta mostrando la entrada 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
Después de agregar la constante en
wp-config.php
WP-CLI
Y suponiendo que tiene su
config.yml
configuración correcta, puede omitir la--path
bandera al llamarcron run
.Para ejecutar todas las tareas cron debidas en orden:
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;
Si desea que se ejecuten simultáneamente (ejecutando primero el cron no específico del sitio):
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;
Desearía poner cualquiera de las opciones en un archivo ejecutable
agregar una tarea crontab
y probablemente ejecutar cada minuto
Si desea ejecutar un comando personalizado desde cron, es posible que deba especificar las rutas completas para que wp-cli funcione.
PHP
La única razón por la que necesitaría cargar WordPress aquí es reunir las URL de la base de datos en lugar de utilizar una lista predefinida. Solo vamos a hacer ping a esas URL y realmente no nos importa cuál sea la respuesta.
Y agregue una sola llamada a su
custom-cron.php
en un crontabfuente
Una línea más fácil con menos golpe:
wp site list --field=url | xargs -i -n1 wp cron event run --due-now --url="{}"
Puede ejecutarlo manualmente o ponerlo en un script y llamarlo desde cron como en las otras respuestas.
fuente
Esta es mi solución:
Llamamos a esto desde crontab, espero que ayude
fuente
Creo que debe decirnos qué quiere decir con "ejecutar wp-cron.php de la manera correcta" en primer lugar. Según Wordpress, no tiene sentido que deshabilite wp-cron y quiera que se ejecute ... Desde la perspectiva de Linux, wget-ing o / bin / php-ing wp-cron.php sería correcto, pero parece que su host particular está limitando su número de invocaciones de php por razones de seguridad? - esa parte no está completamente clara en tu descripción.
Otra pregunta: ¿cuántos correos electrónicos son "una tonelada"? Hay buenas razones por las cuales no deberías intentar enviar demasiados correos electrónicos tan rápido.
Puede que tenga que repensar sus objetivos.
(Yo comentaría en lugar de responder, pero no tengo suficiente reputación en wpstack).
fuente
DISABLE_WP_CRON
para deshabilitar este método al configurar el método cron más confiable del sistema.