Introdução
Imagine que você tenha um robô que limpa sua casa enquanto você dorme. Como você está dormindo, não consegue vê-lo trabalhando. Ao acordar, como saberá se ele realmente limpou a casa ou se ficou preso debaixo do sofá?
A resposta é: peça ao robô para manter um diário.
No Linux, os scripts automatizados geralmente são executados em segundo plano ou por agendadores, sem ninguém observando o terminal. Isso significa que a saída na tela não é suficiente. Para acompanhar o que aconteceu, gravamos a saída em um arquivo de log.
Este é um dos hábitos de automação mais simples e valiosos. Um script sem logs pode falhar silenciosamente. Um script com logs deixa evidências.
Neste laboratório, você aprenderá a:
- Desviar a saída: ensinar um script a gravar em um arquivo em vez de exibir na tela.
- Preservar o histórico: usar o operador de acréscimo para adicionar novas entradas sem apagar as antigas.
- Adicionar marcas de tempo: garantir que cada entrada do diário tenha data e hora.
Acrescentar a saída a um arquivo de log
Os scripts comuns exibem a saída imediatamente na tela. É como conversar pessoalmente com alguém. Porém, se ninguém estiver ouvindo — como acontece com scripts automatizados — as palavras serão perdidas para sempre.
Precisamos capturar essas palavras em um arquivo. Para isso, usaremos os operadores de redirecionamento.
Isso se relaciona diretamente a uma ideia anterior sobre o shell: normalmente, os comandos gravam na saída padrão, e o redirecionamento altera o destino dessa saída. O registro é apenas um uso prático desse mesmo mecanismo na automação.
>(Substituir): “Apague o diário e comece uma nova página.” (Ruim para preservar o histórico)>>(Acrescentar): “Vá para a próxima linha vazia e escreva nela.” (Bom para preservar o histórico!)
Vamos examinar o script simples que preparamos:
cat myscript.sh
Ele apenas exibe “The script is running”. Se você executá-lo agora (./myscript.sh), a mensagem será exibida na tela.
Vamos alterá-lo para gravar em um diário chamado script.log.
Abra o script:
nano myscript.sh
Altere a linha para usar o operador >>.
Dica importante: ao gravar logs, use sempre o caminho absoluto — o endereço completo —, como /home/labex/project/script.log. Isso garante que o diário não seja criado em uma pasta inesperada se o script for executado a partir de outro local.
Esse hábito é importante porque tarefas agendadas geralmente são executadas em um diretório de trabalho diferente daquele que você espera em um shell interativo. Um script que grava em script.log sem especificar o caminho pode criar o arquivo no local errado.
Seu arquivo deve ficar assim:
#!/bin/bash
echo "The script is running" >> /home/labex/project/script.log
Salve e saia.
Agora, execute o script:
./myscript.sh
Nenhuma mensagem será exibida.
O script foi executado, mas não mostrou nada para você. Em vez disso, ele gravou silenciosamente no diário.
Verifique o diário:
cat script.log
Você deverá ver a mensagem armazenada no arquivo.
Adicionar marcas de tempo
Uma entrada de diário que descreve “o que aconteceu” não é útil se não informar “quando aconteceu”. Se o seu script for executado todos os dias durante um ano, o arquivo de log terá apenas 365 linhas idênticas dizendo “The script is running”.
Precisamos adicionar uma marca de tempo. O Linux tem um comando chamado date, que exibe a hora atual. Também redirecionaremos essa saída para o arquivo de log.
Este é o início da observabilidade: deixar evidências suficientes para que uma pessoa consiga reconstruir o que aconteceu mais tarde. Até mesmo marcas de tempo simples melhoram bastante sua capacidade de solucionar problemas em tarefas automatizadas.
Abra myscript.sh:
nano myscript.sh
Adicione o comando date antes da mensagem. Assim, o log exibirá primeiro a hora e depois a ação.
#!/bin/bash
date >> /home/labex/project/script.log
echo "The script is running" >> /home/labex/project/script.log
Salve e saia.
Execute o script novamente:
./myscript.sh
Verifique o log:
cat script.log
Agora, você deverá ver algo semelhante a:
The script is running
Fri Oct 27 10:00:00 UTC 2023
The script is running
(A primeira linha veio do teste anterior.)
Agora cada ação terá uma hora precisa registrada. É assim que você prova ao seu chefe que o backup automatizado realmente foi executado às 3h da manhã!
Em sistemas maiores, os logs também ajudam a responder perguntas mais complexas, como se um script foi executado duas vezes, se parou no meio da execução ou quanto tempo passou entre duas execuções. Bons logs transformam uma automação invisível em algo que você pode inspecionar.
Verificar o histórico do log
Vamos testar a ideia do “acréscimo”. Se tivéssemos usado > — substituição — em vez de >> — acréscimo —, nosso arquivo de log nunca aumentaria; ele mostraria, na prática, apenas a última execução.
Essa diferença é importante sempre que um script é executado repetidamente. Substituir o arquivo é útil para obter um retrato do status atual, mas acrescentar conteúdo costuma ser melhor para manter registros históricos, pois preserva a sequência dos eventos.
Vamos simular um dia movimentado, em que o script é executado várias vezes.
Execute-o três vezes seguidas:
./myscript.sh
./myscript.sh
./myscript.sh
Agora, leia o diário:
cat script.log
Você deverá ver uma lista crescente de entradas, cada uma com sua própria marca de tempo. Esse histórico é muito valioso para solucionar problemas. Se um servidor tiver travado ontem, você poderá voltar no log até a marca de tempo de ontem e ver exatamente o que o script estava fazendo naquele momento.
Resumo
Você ensinou seu script a manter um diário.
Neste laboratório, você aprendeu:
- Redirecionamento (
>>): enviar a “fala” do script para um arquivo para que ela não seja perdida. - Acréscimo: adicionar conteúdo ao histórico em vez de apagá-lo.
- Marcas de tempo: adicionar o comando
datepara saber quando as coisas aconteceram.
Essa é a forma padrão como os serviços profissionais funcionam no Linux. Seja um servidor Web ou um banco de dados, todos gravam dados em arquivos de log exatamente como você acabou de fazer.



