Scripts de Carnaval
Oi a todos? Como foram de carnaval???
Como muitos já sabem, trabalho de dba não tem dia nem horário… é possível que você tenha que trabalhar depois do expediente, aos domingos e feriados, etc.
E, este foi o meu caso: estava de plantão e em plena terça de carnaval, e com isso, fui trabalhar (nem deu pra aproveitar a festa da Roseira da Freguesia do Ó).
O bom é que quase não houve chamados para eu atender; desta forma, pude adiantar algumas das minhas (muitas) pendências (finalmente alguns post-its puderam ir para a Lixeira).
Foi o que eu fiz: Dentre muitas resolvidas, cito as três mais simples (porém não menos importantes):
1 – Finalmente desfiz o dual-boot do meu computador: A partir de hoje, apenas Linux!
2 – Fiz um script para fazer backup dos agendamentos e scripts das crontabs de tais servidores.
3 – Terminei outro script para centralizar o log de backup das 20 instâncias aix sob oracle 9i que administramos;
1 – Linux no notebook
Depois de mais de 1 ano ter postado no blog sobre utilizar Linux, apenas agora tive coragem de instalar apenas ele no computador. Bem, instalei o Ubuntu 9.04, mas isto será assunto para outro post 🙂
2 – Script para backup da crontab
É uma coisa muito simples, mas essencial! Às vezes a gente passa o dia todo implementando um script para automatizar alguma tarefa, agenda seu funcionamento na crontab mas… esquecemo-nos de fazer cópias de segurança …
O pior – e mais fácil de acontecer – é perder todos os agendamentos da crontab! Vocês já repararam como o “E” fica próximo do “R” no teclado??? Infelizmente o AIX não pergunta “Do you really want remove all schedules?” após pressionar ctrl+R.
Como todos os scripts que utilizo geralmente ficam armazenados no diretório /usr/local/scripts , ficou mais fácil:
cd /usr/local/scripts
DIA=`/usr/bin/date +%d +- +%m +- +%y`
crontab -l > "$DIA"_crontab.bkp
tar -cf "$DIA"_backup_scripts.tar *.ksh "$WDAY"_crontab.bkp
gzip "$DIA"_backup_scripts.tar
rm -rf "$DIA"_crontab.bkp
Resumindo: O script trabalha dentro do diretório /usr/local/scripts, cria um arquivo compactado com o conteúdo da crontab, todos os arquivos com extensão *.ksh e nomea-o com a data de criação.
Este script pode ficar ainda melhor se enviado para outro servidor, fita, etc…
3- Centralizando os logs de backup
Este creio que foi o mais simples e o que mais me ajudou.
Diariamente, temos que verificar os logs de backup de umas 25 instâncias que rodam Oracle 9i. Só de entrar em servidor por servidor e olhar o log gastávamos em torno de 30 minutos por dia, além de ser um trabalho extremamento chato.
Solução: Concentrei todos os logs em apenas 1 documento, em apenas 1 servidor!
Para fazer isso, utilizei o conceito de autenticação chave pública/privada do serviço SSH: gerei uma chave sem senha no servidor de destino dos logs, para efetuar remotamente o comando tail em todos os servidores.
Basicamente, são 2 passos:
A – Criar chave pública e copiá-la nos servidores de origem
— Comandos: —
ssh-keygen -t rsa -b 1024
onde -t significa tipo
onde -b significa tamanho em bytes da criptografia
Na mensagem “Enter file in which to save the key (/home/oracle/.ssh/id_rsa):” Pressionei Enter
Na mensagem “Enter passphrase (empty for no passphrase):” Enter de novo
Na mensagem “Enter same passphrase again:” Pressione Enter outra vez
A mensagem “Your identification has been saved in . ” demonstra o arquivo onde está a chave privada do servidor.
Geralmente, o arquivo fica dentro do home do usuário, dentro do diretório .ssh/ , com a extensão .pub
— Veja os comandos que utilizei —
cd –> para entrar no diretório home do usuário corrente
cat .ssh/id_rsa.pub –> para obter a chave gerada.
O conteúdo do arquivo *.pub foi copiado em todos os outros servidores, onde os logs de backup são gerados. No caso do AIX, este arquivo tem o nome id_rsa.pub.
Em tais servidores, copiei a linha de código gerada no arquivo .ssh/authorized_keys, que fica no diretório home do usuário do SO.
B – Criar o script para reunir os logs
Depois de fazer o trabalho pesado, que é entrar servidor por servidor e copiar a chave pública, no servidor de destino eu criei um script para “puxar” as últimas 20 linhas de cada log de backup:
Basicamente, os comandos inseridos dentro do script tem a seguinte sintaxe:
ssh <usuario>@<servidor> “tail -20 /<caminho>/<arquivo_de_log>”
Por exemplo
ssh oracle@serverora41"tail -20 /usr/local/logs/rman_full_sdemp.log" >> /usr/local/logs/logs_centralizados.log
Com isso, os logs de backup ficaram em apenas 1 arquivo (no exemplo acima, dentro de “logs_centralizados.log”).
Para melhorar, agendei a execução deste script 1 vez ao dia, e o resultado está sendo enviado por e-mail. Desta fora, 30 minutos tranformam-se em 3: o tempo de abrir o e-mail!
Bem, com isso, posso dizer que meus scripts de carnaval vão me ajudar o ano todo… Epa, peraí: Será que o ano realmente começa no carnaval?
Se for assim, feliz ano novo! Desejo a todos muitos scripts de sucesso!
Para saber mais sobre ssh:
- http://www.vivaolinux.com.br/artigo/SSH-completo-%28passo-a-passo%29/
- http://focalinux.cipsga.org.br/guia/avancado/ch-s-ssh.htm
PS: Um grande abraço para meus colegas de trabalho Alan e Hernani, grandes incentivadores na instalação do Linux no note, e elaboração dos scritps.