J'ai WordPress Multisite avec plusieurs sites. Je mis en place DISABLE_WP_CRON
à true
mon wp-config.php
.
Si nous configurons la tâche cron avec wget ou curl, nous avons une règle de 30 secondes pour exécuter le script PHP. C'est si petit d'envoyer des tonnes de notifications par e-mail et de faire d'autres choses (peut-être que la connexion au serveur SMTP à distance est lente, c'est peut-être vraiment un tas énorme de notifications par e-mail de bbPress ou autre).
Peut-être que nous pouvons utiliser quelque chose comme ça?
php -q wp-cron.php
Mais il n'est exécuté que sur un seul site Cron Multisite (chaque site a ses propres tâches cron dans différentes tables MySQL).
PS Sur le forum wpmudev.org, j'ai trouvé une étrange "solution" qui utilise également Curl.
Une autre CLIwp cron
PS WP a des commandes impressionnantes mais elle permet uniquement d'exécuter les tâches cron manuellement (oui, nous pouvons utiliser --url
attr). Par exemple:
wp cron event list --url=multisite.com
wp cron event list --url=subdomain.multisite.com
WP-CLI
code principal?wp
/ WP-CLI dans votrePATH
? Si oui, pourquoi ne pas déclencher cela à partir d'un fichier bash exécuté en cron?Réponses:
Je pense que la meilleure façon est d'utiliser WP-CLI, mais vous devez écrire un script bash pour ce faire. En voici une qui devrait le faire pour vous:
Vous devrez ensuite ajouter ce script à crontab et l'exécuter peut-être toutes les minutes si vous le souhaitez
la source
wp cron event run --due-now --url="$SITE_URL" --path="$WP_PATH
- Selon lesrun
documents, vous devez utiliser le--due-now
drapeau. Cela réduirait les recherches et les appels d'événements individuels. Voir: wp-cli.org/commands/cron/event/run . Quoi qu'il en soit, je suis avec @OmarJackman - il utilise la ligne de commande pour utiliser les outils de ligne de commande WordPress. Props pour un exemple de Bash propre. Vous pouvez compléter cette réponse en affichant l'entrée 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
Après avoir ajouté la constante dans
wp-config.php
WP-CLI
Et en supposant que vous avez
config.yml
correctement votre configuration, vous pouvez annuler le--path
drapeau lors de l'appelcron run
.Pour exécuter toutes les tâches cron dues dans l'ordre:
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 vous souhaitez qu'ils s'exécutent simultanément (en exécutant d'abord le cron non spécifique au site):
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;
Vous souhaitez mettre l'une ou l'autre option dans un fichier exécutable
ajouter une tâche crontab
et probablement exécuter chaque minute
Si vous souhaitez exécuter une commande personnalisée à partir de cron, vous devrez peut-être spécifier les chemins d'accès complets pour que wp-cli fonctionne.
PHP
La seule raison pour laquelle vous auriez besoin de charger WordPress ici est de rassembler les URL de la base de données plutôt que d'utiliser une liste prédéfinie. Nous allons seulement cingler ces URL et nous ne nous soucions pas vraiment de la réponse.
Et ajoutez un seul appel à votre
custom-cron.php
dans une crontabla source
Une doublure plus facile avec moins de coups:
wp site list --field=url | xargs -i -n1 wp cron event run --due-now --url="{}"
Vous pouvez l'exécuter manuellement ou le mettre dans un script et l'appeler depuis cron comme dans les autres réponses.
la source
Voici ma solution:
Nous appelons cela de crontab, espérons que cela aide
la source
Je pense que vous devez d'abord nous dire ce que vous entendez par «exécuter wp-cron.php de la bonne façon». Selon Wordpress, cela n'a aucun sens que vous désactiviez wp-cron et que vous souhaitiez néanmoins qu'il s'exécute ... Du point de vue Linux, wget-ing ou / bin / php-ing wp-cron.php serait correct, mais il semble que votre hôte particulier limite votre nombre d'appels php pour des raisons de sécurité? - cette partie n'est pas complètement claire à partir de votre description.
Une autre question: combien d'e-mails sont "une tonne"? Il y a de bonnes raisons pour lesquelles vous ne devriez pas essayer d'envoyer trop de courriels aussi rapidement.
Vous devrez peut-être repenser vos objectifs.
(Je commenterais au lieu de répondre mais je n'ai pas assez de réputation sur wpstack.)
la source
DISABLE_WP_CRON
de désactiver cette méthode lors de la configuration de la méthode cron du système plus fiable.