Eu tenho o WordPress Multisite com vários sites. Criei DISABLE_WP_CRON
a true
na minha wp-config.php
.
Se configurarmos a tarefa cron com wget ou curl, teremos uma regra de 30 segundos para executar o script PHP. É muito pequeno enviar toneladas de notificações por email e fazer outras coisas (talvez a conexão remota do servidor SMTP seja lenta, talvez seja realmente um monte enorme de notificações por email do bbPress ou algo assim).
Talvez possamos usar algo assim?
php -q wp-cron.php
Mas é executado apenas cron em um site no Multisite (cada site tem suas próprias tarefas cron em diferentes tabelas MySQL).
PS No fórum wpmudev.org , encontrei uma "solução" estranha que também usa o Curl.
Outra CLI dowp cron
PS WP possui comandos impressionantes, mas só permite executar tarefas cron manualmente (sim, podemos usar --url
attr). Por exemplo:
wp cron event list --url=multisite.com
wp cron event list --url=subdomain.multisite.com
WP-CLI
código principal?wp
/ WP-CLI no seuPATH
? Se sim, por que não acionar isso de um arquivo bash em execução no cron?Respostas:
Eu acho que a melhor maneira é usar o WP-CLI, mas você precisará escrever um script bash para fazer isso. Aqui está um que deve fazer isso por você:
Você precisará adicionar esse script ao crontab e executá-lo a cada minuto, se quiser
fonte
wp cron event run --due-now --url="$SITE_URL" --path="$WP_PATH
- De acordo com osrun
documentos, você deve utilizar a--due-now
bandeira. Isso reduziria as pesquisas e chamadas de eventos individuais. Veja: wp-cli.org/commands/cron/event/run . De qualquer forma, estou com o @OmarJackman - ele está utilizando a linha de comando para usar as ferramentas de linha de comando do WordPress. Adereços para um exemplo limpo do Bash. Você pode completar esta resposta mostrando a 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
Depois de adicionar a constante em
wp-config.php
WP-CLI
E supondo que você tenha
config.yml
configurado corretamente, você pode omitir o--path
sinalizador ao ligarcron run
.Para executar todas as tarefas cron devidas em ordem:
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;
Se você deseja que eles sejam executados simultaneamente (executando primeiro o cron não específico do 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;
Você gostaria de colocar qualquer opção em um arquivo executável
adicionar uma tarefa crontab
e provavelmente executar cada minuto
Se você deseja executar um comando customizado a partir do cron, pode ser necessário especificar os caminhos completos para o wp-cli funcionar.
PHP
O único motivo para você carregar o WordPress aqui é reunir os URLs do banco de dados, em vez de usar uma lista predefinida. Vamos apenas executar ping nos URLs e não nos importamos com a resposta.
E adicione uma única chamada ao seu
custom-cron.php
em um crontabfonte
Uma linha mais fácil com menos bash:
wp site list --field=url | xargs -i -n1 wp cron event run --due-now --url="{}"
Você pode executá-lo manualmente ou colocá-lo em um script e chamá-lo de cron como nas outras respostas.
fonte
Esta é a minha solução:
Chamamos isso de crontab, espero que ajude
fonte
Eu acho que você precisa nos dizer o que você quer dizer com "execute o wp-cron.php da maneira certa" em primeiro lugar. De acordo com o Wordpress, não faz sentido desabilitar o wp-cron e ainda assim executar ... Da perspectiva do Linux, wget-ing ou / bin / php-wp-cron.php estariam corretos, mas parece que seu host em particular está limitando seu número de invocações de php por motivos de segurança? - essa parte não está completamente clara em sua descrição.
Outra pergunta: quantos e-mails são "uma tonelada"? Há ótimas razões pelas quais você não deve tentar enviar muitos emails tão rapidamente.
Você pode ter que repensar seus objetivos.
(Gostaria de comentar em vez de responder, mas não tenho reputação suficiente no wpstack.)
fonte
DISABLE_WP_CRON
para desativar esse método ao configurar o método cron do sistema mais confiável.