Eu tenho uma função para ser executada a cada 5 minutos. Mencionei o seguinte no codex:
<?php wp_schedule_event(time(), 'hourly', 'my_schedule_hook', $args); ?>
Quero executar esta função apenas a cada 5 minutos, independentemente de quando iniciar. Como posso isso?
Também diz que o codex diz que o cron será executado quando um visitante visitar o site. Existe alguma maneira de executar o cron apenas por minutos e sem esperar uma visita?
digamos que a função a seguir deve ser executada a cada 5 minutos, então como posso fazer isso usando wp_schedule_event()
or wp_cron
?
function run_evry_five_minutes(){
// codes go here
}
functions.php
Respostas:
Você pode criar novos horários de agendamento via cron_schedules:
Agora você pode agendar sua função:
Para agendá-lo apenas uma vez, envolva-o em uma função e verifique antes de executá-lo:
Observe o parâmetro $ args! Não especificar o parâmetro $ args em wp_next_scheduled, mas ter $ args para wp_schedule_event, fará com que um número quase infinito do mesmo evento seja agendado (em vez de apenas um).
Por fim, crie a função real que você deseja executar:
Eu acho importante mencionar que o wp-cron está verificando o agendamento e executando os trabalhos agendados devidos toda vez que uma página é carregada.
Portanto, se você tiver um site de baixo tráfego que tenha apenas 1 visitante por hora, o wp-cron será executado apenas quando esse visitante navegar no seu site (uma vez por hora). Se você possui um site de alto tráfego com visitantes solicitando uma página a cada segundo, o wp-cron será acionado a cada segundo, causando carga extra no servidor.
A solução é desativar o wp-cron e acioná-lo por meio de um trabalho cron real no intervalo de tempo em que você executou o trabalho wp-cron de repetição mais rápida (5 min no seu caso).
Lucas Rolff explica o problema e fornece a solução em detalhes.
Como alternativa, você pode usar um serviço gratuito de terceiros, como o UptimeRobot, para consultar seu site (e acionar o wp-cron) a cada 5 minutos, se você não deseja desativar o wp-cron e ativá-lo por meio de um trabalho cron real.
fonte
Se o seu site recebe tráfego intenso, você pode tentar
set_transient()
executá-lo (aproximadamente) a cada 5 minutos, por exemplo:fonte
functions.php
quando uma visita é feita na página, uma atualização será feita em uma tabela no meu banco de dadosfunction run_evry_five_minutes() { $homepage = file_get_contents('link to visit'); echo $homepage; }
. Mas a tabela do banco de dados não é atualizada após 6 minutos mesmo.get_transient()
/set_transient()
sem o material cron faz muito mais sentido, muito mais simples, vai atualizar resposta ...Você pode acioná-lo na ativação do plug-in em vez de em cada chamada do plug-in:
fonte
Receio que, além de esperar alguém visitar seu site que executa uma função, a única outra opção é configurar um trabalho cron no seu servidor usando algo como este /programming/878600/how -to-create-cronjob-using-bash ou se você possui uma interface de estilo cpanel no seu servidor, às vezes há uma interface gráfica para configurar isso.
fonte
functions.php
porque, quando a função está em umplugin
ou emfunctions.php
, não podemos pedir aos clientes que configurem um cron a partir do cpanel por conta própria ..O plug- in Cronjob Scheduler permite que você execute tarefas frequentes de maneira confiável e oportuna, sem que ninguém precise visitar seu site, tudo o que você precisa é de pelo menos 1 ação e um cronograma Unix Crontab.
É muito fácil de usar e muito flexível. Você cria sua própria função e define uma ação dentro dela. Depois, você pode escolher sua ação no menu do plug-in e acioná-la sempre que quiser.
fonte
Eu tenho uma solução possível usando uma função de agendamento e uma função WP Ajax recursiva.
file_get_contents()
Se o contador for igual ou superior a 60, ele redefinirá o contador e aguardará o próximo trabalho cron.
Se o contador for múltiplo de 5 (a cada 5 minutos), ele executará a função desejada
E, além das condições, ele dorme por 59 segundos
sleep(59);
(assumindo que sua função seja rápida). Após o sono, ele será ativadofile_get_contents()
novamente.Coisas importantes a serem observadas:
set_time_limit(90);
para tentar impedir que o servidor interrompa sua função antes do sonoÉ uma solução, não é boa, e pode ser bloqueada pelo servidor. Usando um cron externo, você pode definir uma função simples e o servidor utilizará recursos uma vez a cada 5 minutos. Usando esta solução, o servidor utilizará recursos o tempo todo.
fonte
A resposta de @ johano explica corretamente como configurar um intervalo personalizado para o trabalho cron do WP. A segunda pergunta ainda não foi respondida, que é como executar um cron a cada minuto:
No arquivo
wp-config.php
, adicione o seguinte código:Adicione um trabalho cron (
crontab -e
no unix / linux):A primeira parte (etapa 1) desabilitará o trabalho cron interno do WordPress. A segunda parte (etapa 2) executará manualmente o cron do WordPress a cada minuto.
Com a resposta de @ Johano (como executar uma tarefa a cada 5 minutos) e a minha (como executar manualmente o cron), você deve conseguir atingir seu objetivo.
fonte