O que é um Cron Job e como usá-lo?

Tetiana Yurchenko / Shutterstock
O utilitário cron é usado para executar scripts e comandos em intervalos regulares e em horas e datas específicas. Ele é integrado à maioria das distros Linux e oferece uma maneira muito útil de agendar tarefas em seu servidor.
cron é uma ferramenta de automação, então qualquer coisa que você execute regularmente pode ser alternada para um cron job. Se você quiser fazer backups diários regulares ou reiniciar um serviço uma vez por semana, o cron pode fazer isso.
Como o Cron funciona?
Os trabalhos do cron são definidos em um arquivo chamado crontab. Este arquivo é exclusivo para cada usuário e, embora geralmente estejam localizados em / var / spool / cron / crontabs, não se destinam a ser editados diretamente. Em vez disso, você os edita por meio do comando crontab:
crontab -e
Isso abrirá o crontab do seu usuário no editor de texto CLI padrão. Se isso travou no vim, você pode alterar o editor padrão executando select-editor em alguns sistemas ou adicionando export VISUAL = micro; ao seu ~ / . bashrc (ou equivalente em shell).
Por padrão, seu crontab está provavelmente em branco, então você terá que adicionar tarefas manualmente. Um cron job geralmente é formatado como:
minuto hora dia mês dia da semana < comando para executar >
Publicidade
O comando a ser executado pode ser qualquer coisa, incluindo scripts de shell
Os valores para cada variável de tempo podem ser curingas, que o cron interpretará como sempre verdadeiro. Por exemplo, se você quiser executar um trabalho quinze minutos depois de cada hora, todos os dias, você usará:
15 * * * * comando
Isso será executado no minuto 15 de cada hora, cada dia, cada mês, não importa o dia da semana.
Se você quisesse executar um trabalho às 17h30 todas as sextas-feiras, você usaria:
30 17 * * 5 comando
cron também oferece suporte a valores em intervalos e em etapas. Os valores de intervalo incluem todos os valores dentro de um intervalo específico. Se você quiser executar um trabalho a cada hora enquanto estiver trabalhando, use:
0 9-17 * * 1-5 comando
Das 9h às 17h, de segunda a sexta-feira. Da mesma forma, você pode definir uma lista de valores separando-os com vírgulas.
Publicidade
Os valores escalonados são executados em intervalos mais específicos. Você pode executar trabalhos a cada duas horas usando:
0 * / 2 * * * comando
Lembre-se de que o relógio começa à meia-noite, 00:00. Seu trabalho será executado uma vez então, às 2h, às 4h e assim por diante.
Algumas versões do cron suportam mais sintaxe, como @daily para executar uma vez por dia ou @reboot para executar a cada reinicialização, embora sua distribuição possa variar.
Se você deseja uma maneira fácil de depurar a sintaxe do cron, existem muitos editores online, como crontab. guru, que mostram o que sua expressão de programação significa em termos leigos, ou seja, “ No minuto 0 após cada segunda hora. ”
RELACIONADO: Como usar o Cron com seus contêineres Docker
Certificando-se de que o Cron está funcionando
O Cron não mostra nenhuma indicação de que está executando seus trabalhos. Se desejar saber se está funcionando, você precisará redirecionar a saída manualmente. Você pode fazer isso canalizando a saída para um arquivo de log:
* * * * * echo "test" > > arquivo de log 2 > & 1
O > > operador anexa a saída a um arquivo, e o operador 2 > & 1 certifica-se de incluir stderr na saída. O equivalente do bash seria apenas & > > no lugar do > & gt ;, mas isso pode não funcionar em todas as distros, já que o cron usa / bin / sh por padrão.
Publicidade
O Cron pode ser configurado para enviar e-mails com a saída dos trabalhos. Na verdade, ele faz isso por padrão com o endereço de e-mail padrão da sua conta de usuário, mas provavelmente não está configurado corretamente. Para fazer o e-mail funcionar, você precisará de um agente de e-mail instalado e configurado no seu servidor, que permitirá que você use o comando mail para enviar e-mails. Em seguida, coloque esta linha acima de seus cron jobs em seu cron job:
MAILTO = "seunome@gmail. com"
Agora, qualquer saída de qualquer trabalho que vá para o stdout (por exemplo, não é canalizado para algum lugar) será enviada por correio para o endereço que você especificou. Você pode testar isso adicionando um trabalho temporário para ecoar no stdout a cada minuto:
* * * * * echo "cron mail está funcionando!"
Apenas certifique-se de desligar esse trabalho assim que estiver funcionando, ou ficará irritante muito rapidamente.
Cron usa / bin / sh por padrão, não Bash
Você pode estar usando um shell diferente daquele em que o cron executa seus trabalhos. Bash (/ bin / bash) é um shell comum na maioria das distros e é uma implementação do sh. O arquivo / bin / sh é um link simbólico para uma implementação sh, mas nem sempre é bash. Em sistemas baseados em Debian, como Ubuntu e no macOS, links / bin / sh para traçar por padrão.
O resultado final desta confusão é que seus scripts podem não rodar da mesma forma, e sua variável PATH (entre outras) pode não estar configurada corretamente. Você pode contornar isso de algumas maneiras, e a variante do cron da sua distro pode funcionar de forma diferente, então você pode ter que tentar algumas:
- Adicionando SHELL = / bin / bash ao topo do seu crontab. Você também pode ter que adicionar BASH_ENV = "/ root / . bashrc" para que ele leia seu perfil bash.
- Colocando / bin / bash antes do comando em cada trabalho. Você pode precisar definir a variável BASH_ENV mesmo se não estiver mudando para o bash globalmente.
- Usando o bash shebang #! / Bin / bash na parte superior de cada script. Isso requer que você tenha cada trabalho em seu próprio arquivo de script.
Em qualquer caso, você deve depurar seus cron jobs configurando-os para serem executados alguns minutos antes de considerá-los confiáveis.
Atualizando manualmente seu Crontab
Se você preferir não gerenciar seu crontab por meio do crontab -e, há um método melhor que você pode usar. O comando crontab -l exibirá o conteúdo do seu crontab, e você pode canalizar isso para um arquivo:
crontab -l > my_crontab
Publicidade
Em seguida, carregue esse arquivo em outro sistema e & # 8216; instale &’ com:
crontab my_crontab
Dessa forma, você não causará nenhum erro ao editá-lo diretamente, pois ele ainda é carregado por meio do cron.
Nenhum comentário