Avaliar este artigo :
Este artigo foi útil para si ?
Sim
Não
Vous avez noté 0 étoile(s)
Sommaire
Procédure
O objetivo de um cron job é executar automaticamente um script, um comando ou um programa em horários definidos.
Com o"LWS cron job", pode programar um script no seu site para ser executado em horários diferentes. Por exemplo, uma vez por semana, uma vez por dia, no dia 8 de cada mês, etc.
O Cron é uma ferramenta muito útil para os administradores de sistemas automatizarem várias tarefas, como fazer cópias de segurança de dados, atualizar software,enviar e-mails, etc.
É aplicado um tempo limite de 240s a estas tarefas, o que significa que se o seu script demorar mais de 4 minutos a ser executado, será automaticamente encerrado ao fim de 4 minutos.
Em primeiro lugar, tem de iniciar sessão na sua conta LWS e aceder ao alojamento partilhado para o qual pretende criar uma tarefa cron.
Uma vez na gestão do seu serviço, procure o bloco"Database & PHP" e clique em"Cron tasks".
A primeira coisa a configurar para o seu cron job é a sua periodicidade.
A este nível, o LWS oferece pré-definições na sua ferramenta para que possa configurá-la com um clique.
Para o fazer, basta utilizar a primeira lista no topo do formulário e selecionar um dos parâmetros propostos. Os campos serão automaticamente preenchidos de acordo com a periodicidade indicada na lista selecionada.
Se a periodicidade que pretende configurar não for proposta nesta primeira lista, não se preocupe, podemos configurar cada elemento.
Para cada elemento (minutos, horas, dias, etc.), pode introduzir os valores manualmente ou utilizar o campo de lista à direita de cada campo.
Assim, se, por exemplo, quiser que a minha tarefa comece todos os dias às 12:27, só tenho de selecionar o número 27 na lista anexa ao campo dos minutos e selecionar 12:00 pm (meio-dia) na lista anexa ao campo das horas.
Existem três formas de chamar o seu script através da ferramenta Cron Task:
A diferença entre estas três opções reside principalmente na forma como executam o seu script.
Uma chamada Wget ou Curl utiliza o protocolo HTTP, o que significa que estará sujeita às configurações e restrições do Apache, como o tempo limite, que pode ser relativamente curto.
Achamada PHP, por outro lado, estará livre das limitações que discutimos com os outros dois métodos. Pense na chamada PHP como se estivesse a passar por uma ligação SSH.
Poderá, portanto, perguntar-se qual o método a escolher para configurar a sua tarefa Cron. A nossa resposta é que não existem diferenças reais para scripts básicos que são executados rapidamente. No entanto, se a sua tarefa CRON for bastante grande, com muitas acções executadas e, portanto, um tempo de execução ligeiramente mais longo, o método mais adequado será umachamada PHP. Ao contrário do Curl ou do Wget, o tempo limite será mais longo (4 min).
Vamos ver como configurar um cron job para cada uma das chamadas mencionadas acima. Tomaremos como exemplo um site simples que chama um script de raiz.
Chamada cURL
Ao fazer uma chamada curl utilizando o protocolo HTTP, chamamos simplesmente o URL para o nosso ficheiro da seguinte forma
curl -s -H "Cache-Control: no-cache" "https://www.mon-domaine.fr/cron.php" > /dev/null
Também podemos precisar de enviar parâmetros para o nosso script. Para isso, basta adicioná-los da seguinte forma:
curl -d "param1=value1¶m2=value2" -s -H "Cache-Control: no-cache" "https://www.mon-domaine.fr/cron.php" > /dev/null
Isto permitir-nos-á obter estes valores de parâmetros no código do nosso script POST.
Opção | Função |
---|---|
-s |
Modo silencioso (sem barra de progresso). |
-H "Cache-Control: no-cache" |
Forçar a não-cache do lado do servidor. |
> /dev/null |
Redirecciona a saída para não guardar nada. |
Chamada Wget
Durante uma chamada Wget, que também usa o protocolo HTTP, como na chamada cURL, também chamaremos o URL do nosso script. Isto dará :
wget --no-cache --output-document=/dev/null --header="Cache-Control: no-cache" "https://www.mon-domaine.fr/cron.php"
Se precisarmos de passar parâmetros para o script, com o Wget não teremos outra escolha senão passar os parâmetros em GET. Aqui está como escrever o comando :
wget --no-cache --output-document=/dev/null --header="Cache-Control: no-cache" "https://www.mon-domaine.fr/cron.php?param1=value1¶m2=value2"
No script, podemos obter estes dois parâmetros em GET.
Opção | Função |
---|---|
--no-cache |
Evita a utilização de caches intermédios (útil com determinados proxies). |
--output-document=/dev/null |
Não armazena nada localmente. |
--header="Cache-Control: no-cache" |
Envia um cabeçalho HTTP para evitar o cache do lado do servidor. |
Chamada PHP
No caso de um site simples, imaginemos que o ficheiro que contém o meu script se chama cron.php
Tudo o que precisa de fazer é introduzir o seguinte comando na ferramenta Cron Task:
php /htdocs/cron.php
Aqui, a versão do PHP utilizada para executar o seu script será a 8.0 por defeito.
Se pretender utilizar uma versão específica do PHP, basta modificar ligeiramente a chamada. Por exemplo, se quiser utilizar a versão 7.2 para executar o script, este é o comando chamado :
php72 /htdocs/cron.php
Podemos também precisar de passar um argumento que será depois utilizado no nosso script.
Por exemplo, imaginemos que o objetivo do nosso script é enviar um e-mail com base num critério que definimos, como o aniversário. Podemos, portanto, querer passar este critério na chamada. Eis como o fazer através da linha de comandos :
php72 /htdocs/cron.php type=anniversary
Casos especiais
Existem também casos especiais, dependendo do que utiliza para o seu sítio.
Por exemplo, no caso de um site criado com a framework Cakephp, a configuração da tarefa CRON será um pouco diferente porque será feita através de um comando SHELL chamado pelo sistema da framework.
Imaginemos que temos um site de comércio eletrónico criado com a estrutura Cakephp e que queremos configurar um script que enviará um e-mail ao melhor cliente para lhe oferecer um código promocional.
Vamos criar um comando Cake a que chamaremos SendCP, que conterá o script que gere o que queremos fazer. Eis como vamos configurar a tarefa Cron :
php72 /htdocs/Console/cake.php SendCP
Demoraria muito tempo a dar um exemplo de cada caso, mas com o que foi dado aqui, já tem uma boa base para utilizar a ferramenta de tarefas Cron.
Usando os vários exemplos, sabemos agora como escrever o nosso comando para :
Vamos agora ver como criar um ficheiro de registo para podermos ver o que aconteceu durante o script chamado pelo Cron.
Para isso, vamos utilizar o exemplo abaixo para o nosso script CRON.
Exemplo de uma função PHP echo para o ficheiro de registo
<?php /* Para não ter que se preocupar com cache */ header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); /* Escreve a data atual no ficheiro, por exemplo: 2023/01/19 12:24:01 */ /* PHP_EOL permite-lhe saltar uma linha no ficheiro */ echo date('Y/m/d h:i:s').PHP_EOL; /* Escreve a frase abaixo no ficheiro de log */ echo 'A gravar o meu Cron'.PHP_EOL.PHP_EOL; ?>
Renderização do ficheiro de registo depois de lançar o script via Cron Job
2023/01/19 02:57:01 Gravando meu Cron 2023/01/19 03:57:01 Gravando meu Cron 2023/01/19 04:57:01 Gravando meu Cron 2023/01/19 05:57:01 Gravando meu Cron 2023/01/19 06:57:01 Gravando meu Cron 2023/01/19 07:57:01 Gravando meu Cron 2023/01/19 08:57:01 Gravando meu Cron
O que você coloca no seu arquivo de log dependerá de você e do que você quer acompanhar no seu script. Por exemplo, pode ser uma lista de acções com o resultado de cada uma.
Exemplo de uma chamada cURL com retorno num ficheiro de registo
Para uma chamada cURL, aqui está o comando a ser inserido no campo "Comando":
curl -s -H "Cache-Control: no-cache" "https://www.mon-domaine.fr/cron.php" > /htdocs/logs/cron_curl.log 2>&1
Neste exemplo, serão feitos writebacks (echo PHP) para o ficheiro cron_curl.log na pasta logs. Se o ficheiro ou pasta não existir, será criado automaticamente.
Opção | Função |
---|---|
-s |
Modo silencioso (sem barra de progresso). |
-H "Cache-Control: no-cache" |
Forçar a não-cache do lado do servidor. |
> /htdocs/logs/cron_curl.log |
redirecciona a saída padrão (stdout) para cron_curl.log. |
2>&1 | também redirecciona os erros (stderr) para o mesmo ficheiro. |
Exemplo de chamada ao wget com retorno a um ficheiro de registo
Para uma chamada ao Wget, eis o comando a utilizar:
wget -O - -q --no-cache --header="Cache-Control: no-cache" "https://www.mon-domaine.fr/cron.php" > /htdocs/logs/cron_wget.log 2>&1
Neste exemplo, o feedback de escrita (echo PHP) será enviado para o ficheiro cron_wget.log na pasta logs. Se o ficheiro ou pasta não existir, será criado automaticamente.
Opção | Função |
---|---|
--no-cache |
Evita o uso de caches intermediários (útil com alguns proxies). |
--header="Cache-Control: no-cache" |
Envia um cabeçalho HTTP para evitar o armazenamento em cache no lado do servidor. |
--post-data="..." | adiciona um cabeçalho HTTP personalizado. |
> /htdocs/logs/cron_wget.log |
redirecciona a saída padrão (stdout) para cron_wget.log. |
2>&1 | também redirecciona os erros (stderr) para o mesmo ficheiro. |
Exemplo de uma chamada PHP com retorno para um ficheiro de registo
Para uma chamada em PHP, eis o comando a utilizar:
php72 /htdocs/cron.php >> /htdocs/logs/cron_php.log
Neste exemplo, o feedback de escrita (echo PHP) será enviado para o ficheiro cron_php.log na pasta logs. Se o ficheiro ou pasta não existir, será criado automaticamente.
Depois de ter criado as suas tarefas cron, pode encontrá-las diretamente na listagem que aparece por baixo do formulário de adição.
Aqui encontrará uma lista com o comando registado, a periodicidade e a opção de eliminar uma tarefa cron ou de a colocar em pausa.
Se tiver um pacote LWS Starter ou superior, pode modificar o cron job do seu pacote através do Terminal Web acessível a partir da administração do seu pacote.
Para isso, ligue-se ao seu alojamento e aceda ao alojamento partilhado para o qual pretende modificar uma tarefa cron.
Clique em"Terminal" na secção "Software".
Aceda ao ficheiro cron utilizando o seguinte comando:
crontab -e
Uma vez no ficheiro cron, procure no ficheiro a tarefa que pretende modificar. Cada linha do ficheiro representa uma tarefa separada. Em seguida, modifique a tarefa cron, certificando-se de que a sintaxe permanece correta. Em seguida, guarde-a utilizando o atalho de teclado [CTRL] +X e depois"Y". De seguida, prima [Enter].
Pode então verificar se a tarefa cron foi corretamente modificada utilizando o seguinte comando:
crontab -l
Ligou o seu domínio ao CloudFlare utilizando o DNS deste último e pretende configurar um cron job a partir da sua área de cliente na secção associada, mas o cron job só é executado uma vez sem se repetir no intervalo de tempo pretendido. Este problema é conhecido, o CloudFlare bloqueia a execução de crons enviados a partir dos nossos serviços. Para superar esse problema, aqui está uma solução alternativa.
As tarefas cron configuradas a partir da área de cliente não funcionam se utilizar o DNS do CloudFlare. Para superar esse problema, siga este procedimento:
Na secção "DNS", adicione um registo CNAME, como mostra o exemplo seguinte:
Substitua"cron" pelo nome do seu subdomínio e"domain.ext" pelo seu nome de domínio.
Certifique-se de que a nuvem está cinzenta e não laranja. Isto indica ao CloudFlare que não pretende utilizar os seus serviços para este subdomínio.
Pode então clicar no botão"Adicionar registo".
Agora você sabe como : - Entender o propósito e a operação de um cron job 🤖
Esperamos que este artigo tenha fornecido todas as chaves para dominar as tarefas cron e automatizar as tarefas do seu sistema de forma eficiente.
Se tiver alguma dúvida, feedback ou dicas para partilhar, não hesite em deixá-los como um comentário. Obrigado pela leitura e até breve para mais conselhos práticos! 🙏💬
Avaliar este artigo :
Este artigo foi útil para si ?
Sim
Não
0mn leitura
Multi-domínio - Colocar vários domínios no mesmo serviço de alojamento web
1mn leitura
É possível remover a função anti-spam do RSpamD no alojamento partilhado?
0mn leitura
Como posso ver as mensagens de correio eletrónico enviadas utilizando a função de correio PHP e bloqueadas pelo SPAMASSASSIN?