5 exemplos do Crontab para ajudá-lo a automatizar as tarefas do Linux
O programa cron automatiza a execução de outros programas no Linux. Cron é um daemon que roda continuamente e inicia outros programas de acordo com uma determinada programação. Vários arquivos diferentes definem esta programação. Eles são individualmente conhecidos como crontabs.
O Cron pode agendar qualquer comando ou tarefa Unix. Às vezes, você vai querer trabalhar com um comando simples. Outras vezes, você precisará escrever um script para realizar toda a tarefa. O Cron funciona bem com qualquer uma das abordagens. Ele também oferece suporte a regras de agendamento complicadas e maneiras flexíveis de lidar com a saída do script.
Esteja você realizando tarefas simples do usuário ou uma administração de sistema completa, entender como o cron funciona usando exemplos práticos é essencial.
1. Limpando / tmp usando um Crontab para todo o sistema
O diretório / tmp é um local temporário para uso geral por qualquer programa ou usuário do sistema. Muitos sistemas Unix irão deletar arquivos antigos no diretório / tmp durante a inicialização. Outros programam essa operação, muitas vezes usando o cron.
No entanto, se você deseja controle personalizado sobre este processo, ou deseja aplicá-lo a um diretório diferente, configurar uma tarefa cron rápida é uma maneira fácil de fazer isso.
Esta é uma maneira de limpar / tmp ou qualquer outro diretório de sua escolha:
1 3 * * * /usr/bin/find /tmp -type f -atime +10 -delete
Às três e um minuto, todos os dias, o cron executará este comando. Ele usa o comando find para pesquisar arquivos no diretório / tmp. Ele filtra qualquer coisa, exceto arquivos normais que foram modificados pela última vez há pelo menos 10 dias. Em seguida, ele remove todos os arquivos que encontrar.
Você deve adicionar um comando como este a um crontab global como / etc / crontab ou crontab do root usando sudo crontab -e . O comando precisa ser executado como root para que possa excluir arquivos em / tmp independentemente de quem os possui.
Observe que este exemplo especifica o caminho completo para o comando find. O Cron usa uma configuração básica de PATH para pesquisar executáveis, portanto, se o comando estiver em um local padrão (como / usr / bin ), isso não é realmente necessário. Você pode especificar um PATH alternativo no próprio crontab se preferir essa abordagem. Mas usar um caminho completo para comandos é um pouco mais flexível.
Se você estiver trabalhando em um projeto que grava logs ou armazena dados em cache, esse tipo de abordagem pode ser vital se você estiver excluindo arquivos para liberar espaço em disco. Embora o exemplo acima seja uma abordagem rápida e suja, você deve usar um comando como tmpwatch , se estiver disponível.
2. Backups de banco de dados duas vezes ao dia
De agora em diante, vamos nos concentrar em tarefas específicas do usuário que você pode gerenciar por meio de seu crontab local. Você pode editar o crontab do seu usuário atual usando o seguinte comando:
crontab -e
Este crontab deve conter tarefas específicas para sua conta de usuário. Imagine que você esteja trabalhando em um projeto envolvendo o preenchimento de um banco de dados MySQL. Você pode usar a ferramenta mysqldump para criar um dump SQL de um banco de dados inteiro. Redirecionando sua saída, você pode ter backups de banco de dados fáceis e agendados.
30 4 * * * /usr/local/mysql/bin/mysqldump --login-path=local --databases albums > /tmp/album-db.$(date +%s).sql
Por padrão, o cron envia a saída (incluindo erros) por e-mail para o usuário ao qual o arquivo crontab pertence. Mas você pode redirecionar a saída da mesma forma que faria em uma linha de comando, usando a notação de nome de arquivo> .
Observe como o exemplo acima usa a substituição de comando para construir o nome do arquivo com base no carimbo de data / hora Unix atual. Como o símbolo % tem um significado especial para cron, o comando precisa escapar dele com uma barra invertida precedente.
3. Verificando o tempo de atividade do site com um script personalizado
Você deve ter notado que o comando no último exemplo era desconfortavelmente longo. Felizmente, não há nada que o impeça de salvar comandos em um script e executá-lo por meio do crontab. Aqui está um exemplo que executa um script a cada minuto:
* * * * * /Users/bobby/bin/site-monitor.sh
Observe que, em teoria, você pode usar a variável HOME ou a expansão de til para um comando mais curto:
* * * * * ~/bin/site-monitor.sh
Você pode escolher evitar fazer isso, caso o cron pare de suportá-lo. Não há nenhum dano real em usar o caminho completo e é indiscutivelmente mais legível.
O próprio script usa o programa curl para buscar o código de status HTTP para um determinado URL. Se o status indicar qualquer coisa diferente de sucesso, o script gravará uma mensagem na saída.
Como mencionado anteriormente, o cron irá enviar esta saída para nós por e-mail. Pode ser útil fazer com que os comandos do cron não produzam nenhuma saída em caso de sucesso.
#!/bin/bash
STATUS=`curl -s -o /dev/null -I -w "%{http_code}" http://example.com/`
if [ "$STATUS" != "200" ]
then
echo "site appears to be down"
fi
4. Relatórios de espaço em disco via e-mail
Se você deseja alterar o comportamento de email padrão do cron, você pode usar a variável de ambiente MAILTO . O Cron suporta algumas variáveis que você pode definir em seu arquivo crontab. O Cron então aplica essas variáveis ao ambiente de cada comando a seguir.
Para definir um endereço de e-mail de destino alternativo, use o seguinte formato:
[email protected]
Você precisará executá-lo em uma máquina configurada para enviar um e-mail externo, se necessário. Aqui está um exemplo que enviará um e-mail para outro usuário na mesma máquina. Funciona duas vezes por dia, às 12h00 e às 23h00. O comando df exibe o espaço livre em disco, portanto, esta entrada do crontab delega a tarefa de verificar se o espaço em disco está bom:
MAILTO="sarah"
0 12,23 * * * /bin/df -h
O e-mail resultante será semelhante a este:
Observe que o cron adiciona seus próprios cabeçalhos de e-mail personalizados. Eles podem ser úteis para depuração. Você também pode desativar o comportamento de e-mail padrão do cron usando uma string vazia:
MAILTO=""
5. Transmita uma mensagem em horários específicos
Os outros exemplos usam uma programação bastante simples, mas o cron suporta uma sintaxe poderosa para especificações de tempo. Ele lida não apenas com correspondências exatas, mas também:
- Vários valores separados por vírgula ( , )
- Intervalos especificados com um hífen ( – )
- Valores de etapas após uma barra ( / )
Então, por exemplo, se você deseja enviar uma mensagem para todos os usuários conectados, duas vezes por hora durante o horário de trabalho, mas apenas a cada três horas, algo como o seguinte será suficiente:
0 15,45 9-17/3 ? * * * echo 'Enjoy your work!' | wall
Este comando será executado aos 15 e 45 minutos após a hora, a cada três horas durante o horário de 9h às 17h. O comando wall envia uma mensagem para cada usuário do terminal conectado.
Você pode até descobrir que o cron oferece um agendamento mais flexível do que o seu aplicativo de calendário. Algumas variações permitem que você especifique comandos a serem executados na segunda sexta-feira de um mês ou no dia da semana mais próximo a uma determinada data.
O Cron pode automatizar muitos tipos de tarefas do Linux
Esta é uma pequena seleção do tipo de tarefas que o cron pode ajudar a automatizar. Pode levar algum tempo para se familiarizar com a sintaxe complexa, mas o cron é um utilitário poderoso. Você pode usar o cron tanto para tarefas de todo o sistema quanto para tarefas específicas do usuário.
Com uma sintaxe complicada para agendamento, o cron é poderoso, mas você provavelmente deve ter uma boa referência à mão. Crontabs permitem comentários, então você pode querer incluir uma linha de comentário na sua para documentar os campos de tempo.