Agendando programas com o Crontab em horários customizados

Este tópico contém respostas, possui 2 vozes e foi atualizado pela última vez por  Luis FatorBinario 3 anos, 9 meses atrás.

  • Autor
    Posts
  • #11422
     Luis FatorBinario 
    Administrador

    Cron é o serviço Linux responsável por executar tarefas agendadas. Nele podemos programar scripts ou simplesmente rodar comandos.

    Tarefas a cada hora, diárias, semanais ou mensais podem facilmente ser adicionadas criando-se um script e copiando-o para o devido diretório conforme segue:

    – /etc/cron.hourly (a cada hora)

    – /etc/cron.daily (todo dia)

    – /etc/cron.weekly (uma vez por semana)

    – /etc/cron.monthly (uma vez por mês)

    * O script será executado se tiver a permissão correta “x”.

     

    O horário, dia da semana e dia do mês que os scripts serão executados podem ser configurados no arquivo /etc/crontab que terá o seguinte formato:

    * * * * * /comando/a_executar

    O primeiro asterisco representa minutos (0 até 59)

    O segundo representa as horas (0 até 23 [ou a cada x horas veremos isso abaixo])

    O terceiro é usado para os dias do mês (1 a 31)

    O quarto configura o mês (1 a 12)

    E o quinto asterisco refere-se ao dia da semana (0 a 6, sendo que 0 “zero” é referente a domingo)

    No último campo devemos parametrizar qual comando executar (para uma melhor prática escreva sempre o caminho completo do comando)

    Navegando pelos diretórios de cada período mencionado podemos observar scripts já configurados pelo sistema. Visualize alguns e note como são programados (Na maioria dos sistemas a primeira linha será quase sempre essa: “#!/bin/bash” ). A primeira linha indica em qual shell o comando executará, isso é importante.

     

    Como o nosso foco neste post é mostrar como criar uma tarefa agendada customizada vamos para um exemplo prático. Mostrarei abaixo como criar um script que reiniciará o NginX e o PHP-FPM a cada 6 horas (fazendo isso o servidor web roda sempre leve mesmo se sofrer ataques constantes).

    Crie um arquivo chamado nginx-reload no diretório /root/meus_scripts e, por segurança,  acerte as permissões para que somente o root possa ler e executá-lo (acesse o servidor com o usuário root):

    > mkdir /root/meus_scripts

    > touch /root/meus_scripts/nginx-reload

    > chmod -R 0700 /root/meus_scripts/

    Dentro do arquivo nginx-reload cole o seguinte texto (salve após editá-lo):

    #!/bin/bash
    
    # Reinicia o PHP-FPM e o NginX (o crontab executara a cada 6 horas)
    
    /etc/init.d/php5-fpm restart
    /etc/init.d/nginx restart

    Teste o script digitando o seguinte comando (se der algum erro verifique o caminho e o nome correto dos arquivos):

    > /root/meus_scripts/nginx-reload

     

    Agora que já temos o script já podemos agendá-lo no Cron. Para isso usamos o utilitário crontab responsável por gerenciar tarefas agendadas. No terminal digite o comando:

    > crontab -e

    Navegue com as setas até a última linha em branco e adicione este código:

    30 */6 * * * /root/meus_scripts/nginx-reload

    Para sair do editor pressione CTRL + X em seguida tecle Y e ENTER para salvar.

    Verifique se a tarefa foi configurada corretamente com o comando:

    > crontab -l

     

    * Note que usamos o parâmetro “*/6” no segundo asterisco que representa as horas e “30”  no parâmetro dos minutos. Isso fará com que o script seja executado a cada 6 horas sempre aos 30 minutos (exemplo: digamos que se a primeira execução for às 13:30 então a segunda será às 19:30 e assim por diante).

    ** O teclado numérico pode não funcionar quando executar o editor crontab então use os números do teclado alfanumérico (acima da letras).

    IMPORTANTE: Neste exemplo sempre escreva os minutos quando editar as tarefas no crontab ou o script executará a todo minuto. Se quiser configurar para horas exatas substitua o primeiro asterisco por 00 “zero”.

     

    Para verificar se o PHP-FPM reiniciou no horário correto visualize o arquivo /var/log/php5-fpm.log que deverá conter 4 linhas parecidas com estas (aguarde o horário agendado para verificar as linhas de log):

    [02-Nov-2015 16:30:02] NOTICE: Finishing …
    [02-Nov-2015 16:30:02] NOTICE: exiting, bye-bye!
    [02-Nov-2015 16:30:02] NOTICE: fpm is running, pid 24156
    [02-Nov-2015 16:30:02] NOTICE: ready to handle connections

    * Um email será enviado ao root alertando que a tarefa agendada foi executada (em meu servidor desvio todos os emails enviados ao root para a minha conta principal de email e deixo o alerta ligado). Para não enviar o email ou qualquer alerta acrescente “> /dev/null” na linha do agendamento desta maneira:

    30 */6 * * * /root/meus_scripts/nginx-reload > /dev/null

     

    #11611
     chodos 
    Participante

    Luis, tudo bem?

    Veja se consegue me ajudar com esse probleminha, desativei a CRON do WordPress através do wp-config e programei para ser executado o wp-cron através da Cron, pelo ISPConfig > Tarefas no Cron. Só que o job aparentemente não vem funcionando, quando entro no WordPress há diversas tarefas pendentes, embora o relatório do Logwatch e syslog indique a execução pelo usuário proprietário do site, mas quando executo crontab -u userName -l tenho como resposta no crontab for username.

    E se executo o comando programado através do terminal as tarefas do WordPress (agendamentos, backups) são resolvidos. Alguma sugestão?

    #11612
     Luis FatorBinario 
    Administrador

    Boa tarde @chodos,

    Para verificar os logs de erro abra este arquivo: /var/log/syslog

    E as tarefas agendadas devem estar em /etc/cron.d/

     

    Um erro comum ao agendar tarefas pelo Cron é não colocar o caminho inteiro do script a executar. Por exemplo se quiser usar o rsync tente colocar a path toda do rsync.

     

    #11632
     chodos 
    Participante

    Luis, resolvido, o problema era que ao inserir o script pelo ISPConfig não se coloca o comando, o próprio painel coloca o sh ou wget, é preciso apenas inserir o caminho para a execução. Removi o wget do meu comando e está rodando 100%.

    #11633
     Luis FatorBinario 
    Administrador

    Valeu pelo feedback @chodos ainda bem que resolveu lá.

    Essa parte eu nem testei ainda, é bom saber que funciona.

     

Visualizando 5 posts - 1 até 5 (de 5 do total)

Você deve fazer login para responder a este tópico.

©2014-2019 Fator Binário - Todos os direitos reservados

Fazer login com suas credenciais

ou    

Esqueceu sua senha?

Create Account