Gerando arquivos de log com shell script

Introdução:
Shell Scripts são uma verdadeira mão na roda na administração de servidores Linux. Porém um assunto que é um tanto negligenciado neste aspecto é quanto ao registro da informação sobre o que foi feito durante a execução do script, até porque na maioria das vezes o script é executado via cron, e como você não pode ver as informações dele na tela, um arquivo ou sistema de log torna-se essencial.

Modo 1: Log via arquivo próprio
O modo mais simples de realizar o log é através de um arquivo próprio, exclusivo para sua aplicação. Existem diversas formas de se fazer isso, a que mostro a seguir é a que costumo utilizar. Considere o pequeno shell script (em bash) abaixo:



#!/bin/bash
WORKDIR="/root/my_script"
SESSION_LOG=${WORKDIR}/$$.log
LOGFILE=${WORKDIR}/my_script.log
DEST_DIR=${WORKDIR}/backups
DATE=$(date +"%Y-%m-%d_%H:%M:%S")

function LOG(){
DATA=$(date +"%Y-%m-%d %H:%M:%S")
echo ${DATA} $1 | tee -a ${SESSION_LOG}
}

LOG "Iniciando ..."
LOG "Trocando de diretorio"
cd /etc
LOG "Criando o arquivo compactado etc-${DATE}.tar.bz2 em /tmp"
tar -cvjf /tmp/etc-${DATE}.tar.bz2
LOG "Movendo o arquivo etc-${DATE}.tar.bz2 para o diretorio de destino ${DEST_DIR}"
mv /tmp/etc-${DATE}.tar.bz2 ${DEST_DIR}
LOG "Finalizado"

#Salva o log da sessão no log geral
cat  ${SESSION_LOG} >>  ${LOGFILE}

#Descomente para enviar o log da sessão para o usuário root
#mail -s "Log do backup de `date +%F`" root < ${SESSION_LOG}

#remove o log da sessão
rm -f  ${SESSION_LOG}


Nesse simples script, foi criada uma função de nome LOG que deve ser utilizada no formato LOG "Mensagem". Quando chamada, a função LOG imprime a mensagem passada na tela e também em um arquivo de log, definido na variável ${SESSION_LOG}. A vantagem de se utilizar uma função (ao invés de repetir o mesmo código por todo o script) é que, se for necessário alterar algo no código, a alteração é realizada apenas uma vez. Por exemplo, conferindo a página de manual do comando date, verifiquei que a opção %F é equivalente à %Y-%m-%d utilizada e resolvi trocá-la, para otimizar o código. Se não utilizasse uma função, teria de editar cinco linhas. Utilizando a função, basta editar apenas uma linha, independente de quantas vezes a função foi chamada. O script faz um backup do diretório /etc em um arquivo cujo nome é etc-data_hora.tar.bz2 e move esse arquivo para o diretório configurado na variável ${DEST_DIR}, sempre informando (no log de sessão e na tela) o que está sendo realizado. Por fim o script envia o log da sessão para o usuário root via email, concatena o log da sessão no log geral e apaga o arquivo de log da sessão. Esse script contém algumas coisas legais para quem está estudando shell. Um dos pontos fracos dele é que não é feito tratamento de erros. Erros devem ser sempre checados (e logados)

Modo 2: Log via syslog
existe o comando logger, que permite o envio de mensagens de log diretamente pelo protocolo SYSLOG, que gerencia os logs do sistema. Nesse caso, suas mensagens cairiam em um dos arquivos de log do sistema, como o /var/log/messages ou o /var/log/syslog. Fazendo algumas configurações no arquivo de configuração do servidor syslog (normalmente em /etc/syslog.conf). 
Desejando alterar o script acima para fazer log via syslog, basta alterar a função LOG, deixando-a desse jeito:

function LOG(){
DATA=$(date +"%Y-%m-%d %H:%M:%S")
echo ${DATA} $1 | tee -a ${SESSION_LOG}
logger $1
}

Também é necessário comentar a linha "cat  ${SESSION_LOG} >>  ${LOGFILE}", pois o arquivo de log será um dos arquivos de sistema, gerenciados pelo daemon do syslog.

Diminuindo o consumo de memória do Firefox Windows

Introdução
Os meus doze fiéis leitores já devem ter percebido que eu utilizo o navegador Firefox sempre que possível. E como todo bom heavy-user, sou um ávido consumidor de recursos, incluindo complementos/extensões e abas (às vezes chego a ter mais de cinquenta abertas, e não me lembro de ter menos de dez). O único problema disso é o consumo de memória: o Firefox adora memória, e as vezes parece não haver limite para sua fome. Hoje ao chegar no trabalho, haviam umas 30 abas abertas, e o consumo de memória estava em 1.3 Gb !!! Fui buscar no Google por uma extensão que permitisse checar o uso de memória por aba (semelhante ao Google Chrome), e acabei encontrando algo muito melhor (pelo menos até agora ...): O Memory Fox. Para ter uma idéia, após instalar essa extensão, meu consumo de memória despencou de 1.3Gb para apenas 300 MB !!! Um ganho de aproximadamente 75 % !!!

Instalação
Não há muito o que dizer sobre a instalação. Bastou acessar a página da extensão em https://addons.mozilla.org/pt-PT/firefox/addon/53880/ , fazer a instalação e reiniciar o navegador. A única diferença perceptível será um pequeno circulo contendo um "M" na parte inferior da janela.


Configuração
Não há muito o que falar aqui. Clicando com o botão direito no ícone do programa, temos um menu com 3 opções:

  • Abrir o site do complemento
  • Enviar o ícone para a taskbar (não percebi nenhuma alteração aqui) e
  • Opções

A janela de opções também é muito simples (para não dizer simplória). Coloquei a minha abaixo, mas não deve ser necessária nenhuma configuração, já que após reiniciar o navegador a recuperação da memória já ocorre.

Considerações Finais
Essa extensão depende de um programa externo (afom.exe), e por isso funciona apenas nas versões Windows do programa. Segundo o desenvolvedor, a extensão funciona no Windows XP e Vista, mas já vi relatos de pessoas na Internet dizendo que a utilizam no Windows 7 sem problemas. Ah, e antes que alguém pergunte, o consumo de memória do afom.exe é mínimo, da ordem de 1MB.

Dúvidas/problemas/sugestões? Deixe um comentário!!!

Scroll no Touchpad do Notebook com Synaptics

Uma das funções que senti falta no meu recém-comprado Positivo Mobo 2055 3G é a de scroll (rolamento de tela) no TouchPad, no Windows (no Ubuntu Netbook Remix 9.04 essa função já vem habilitada, mas isso é outra história). Pesquisando um pouco na internet, achei a página da Synaptics (que produz um software de mesmo nome), que habilita o uso das extremidades direita e inferior do TouchPad para scroll vertical e horizontal, respectivamente. O programa está disponível para todas as versões do Windows a partir do 95 (alguém ainda usa Windwos 95?!) e é completamente gratuito!!! Para instalar, basta acessar a página http://www.synaptics.com/support/drivers, baixar a versão correspondente ao seu sistema e instalar.As versões para Windows XP e Vista possuem arquivos diferentes para 32 e 64 bits (a maioria das pessoas deve baixar a versão de 32 bits).

Extensões do Firefox: All-in-One Gestures

Introdução:
Abrindo a série sobre extensões do Firefox, está uma das minhas preferidas: All-in-One Gestures. Esta extensão permite controlar a navegação no Firefox através de movimentos (gestos) feitos com o mouse. Você segura o botão direito do mouse e "desenha" o comando desejado. Ao soltar o botão do mouse, o comando é executado. Enquanto você desenha, uma linha vermelha é mostrada na tela para facilitar, e no canto inferior esquerdo aparecem letras representando os movimentos (L = esquerda, R = direita, U = cima, D = baixo), bem como o comando ao qual a sequência executada pertence. Veja a imagem abaixo, com a imagem e as letras destacadas em amarelo.


O comando mostrado na imagem foi L,D,R (esquerda, baixo, direita), tem um formato de um "C" e sua função é  exibir os cookies do navegador relacionados ao site atual. Existem vários gestos pré-setados, e ainda é alterar os gestos default, associá-los a outras funções e até criar movimentos novos. Para ver a lista completa de comandos configurados, execute o comando D,R,D (baixo, direita, baixo). Serão exibidas as funções e os gestos associados.

 

Para personalizar os gestos, vá em Ferramentas -> Complementos, selecione a extensão e clique em opções. Clique na aba "Gestures Customization". Agora selecione a função desejada e clique no botão correspondente:
  • Clear Gestures: limpa o gesto associados a função selecionada.
  • Edit Gesture: edita o gesto associado a função selecionada. O novo gesto podem ser informados através das letras LRDU ou clicando no botão Draw e desenhando. Se o gesto informado já estiver associado a uma outra função, será oferecido para que eles sejam invertidos (a primeira função recebe o gesto da segunda e vice-versa).
  • Swap Gestures: inverte os gestos associados as funções selecionadas (para selecionar mais de uma função, pressione a tecla Control enquanto clica).
  • Add Gesture: permite criar um gesto novo, que será associado à função selecionada. Novamente, caso o gesto criado já estiver associado a uma outra função, será oferecido para que eles sejam invertidos.
Outras funções interessantes fornecidas por esta extensão são o menu de navegação pelas abas (chamado clicando-se com o botão direito e rodando a rodinha do mouse para cima) e o menu de navegação pelo histórico (clicando-se com o botão direito e rodando a rodinha do mouse para baixo). Após chamar um dos dois  menus, basta selecionar o item desejado (aba ou item de histórico) rolando a rodinha do mouse e soltar o botão.



Comandos Úteis

Para finalizar o post, alguns dos gestos que utilizo com mais frequência:

  • Voltar no Histórico (History Back): Esquerda (L)
  • Avançar no Histórico (History Foward): Direita (D)
  • Recarregar Página (Reload Document): Cima, Baixo (U,D)
  • Próxima Aba (Nex Tab): Cima, Direita (U,R)
  • Aba Anterior (Previous Tab): Cima, Esquerda (U,L)
  • Fechar Aba (Close Tab): Baixo, Direita (D, R)
  • Minimizar Janela (Minimize Window): Baixo, Esquerda (D, L). Esse gesto eu costumo trocar para Reabrir Aba (Undo Close Tab).
  • Abrir Nova Aba (Open new Tab in Foreground): Cima (U). Abre uma nova aba em branco. Se for executada em cima de um link, abre esse link em uma nova aba.
  • Abrir Links em Abas (Open Links in Tabs): Termine com Direita, Cima, Esquerda (R, U, L). Faça um desenho (pode ser um traço) sobre quaisquer quantidade de links e termine o desenho com a sequência Direita, Cima, Esquerda. Todos os links sobre os quais o traço passou por cima serão abertos, cada um em uma aba. Muito útil em diretórios de imagens.
  • Zoom In (Double Image Size): Direita, Cima, Esquerda, Baixo (R,U,L,D). Faça um círculo no sentido anti-horário sobre a imagem desejada. Aumenta em 2x o tamanho de uma imagem. Pode ser feito repetidas vezes na mesma imagem.
  • Zoom Out (Double Image Size): Esquerda, Cima, Direita, Baixo (L,U,R,D). O oposto do anterior (um círculo no sentido horário sobre a imagem desejada.)  Diminui  em 2x o tamanho de uma imagem. Pode ser feito repetidas vezes na mesma imagem.
Update
Faltou o link para instalação: 

A versão nessa página suporta até a versão 3.5.x do Firefox. Uma versão beta com suporte à nova versão 3.6.x do Firefox está disponível na página do desenvolvedor, em http://pagesperso-orange.fr/marc.boullet/ext/extensions-en.html. Você vai precisar autorizar o site a instalar aplicativos em seu Firefox. Apesar da versão ser considerada beta, eu já a utilizo há algumas semanas e nunca tive nenhum problema relacionado à ela.