Reindex PostgreSQL - Script para acompanhamento de execução
Dica publicada em Banco de Dados / Postgres
Reindex PostgreSQL - Script para acompanhamento de execução
Aqui está uma versão adaptada do script publicado pelo Caio Ferreira Dias: Reindex PostgreSQL com envio de email de notificação.
Vi a necessidade de adaptar o script pelos seguintes motivos:
Criaremos a estrutura de diretórios para o script. No diretório HOME do usuário "postgres", crie os seguintes diretórios:
mkdir rotinas
$ mkdir rotinas/log
$ mkdir rotinas/log/tmp
cd rotinas
$ nano reindex.sh
Copie e cole o seguinte conteúdo:
Salve e mude o arquivo para executável:
chmod 777 reindex_pg.sh
Pode-se ainda agendá-lo para execução automática, adicionando no Contrab - Wilipedia. Exemplo:
crontab -e
Cole a linha:
Salve a alteração.
Obs.1: Para ser enviado o e-mail, o SSMTP tem que estar devidamente configurado, aqui no VOL tem vários tópicos sobre o assunto.
Obs.2: Os arquivos temporários serão criados no caminho /home/postgres/rotinas/log/tmp e o arquivo de log definitivo, será criado em /home/postgres/rotinas/log.
Agradecimentos especiais ao Caio Ferreira Dias por sua contribuição.
Vi a necessidade de adaptar o script pelos seguintes motivos:
- Ao tentar executar o script original tive problemas já que era necessário informar a senha do usuário postgres, inviabilizando o uso do script com o agendamento via Cron;
- Para não preocupar-me com futuras manutenções no script, tais como incluir novas bases de dados ou remover bases de dados apagadas;
- Para facilitar a detecção de problemas na execução do reindex, fiz uma reorganização da estrutura onde os arquivos serão criados temporariamente para a geração do arquivo de log final.
Criaremos a estrutura de diretórios para o script. No diretório HOME do usuário "postgres", crie os seguintes diretórios:
mkdir rotinas
$ mkdir rotinas/log
$ mkdir rotinas/log/tmp
Criando o script
Acesse o diretório "rotinas":cd rotinas
$ nano reindex.sh
Copie e cole o seguinte conteúdo:
#!/bin/bash script_dir="/home/postgres/rotinas/log/" echo " " > $script_dir/reindex.log echo "Subject: Reindex" > $script_dir/reindex.log echo "From: Servidor Banco de dados " >> $script_dir/reindex.log echo "" >> $script_dir/reindex.log echo "`date` - Fazendo reindex do servidor..." >> $script_dir/reindex.log echo "=======================================================" >> $script_dir/reindex.log LISTA_BANCO="`psql -t -c "select datname from pg_database"`" for banco in $LISTA_BANCO do `reindexdb -U postgres -w -d $banco` touch $script_dir/tmp/reindex-$banco\ -\ `date +%H:%M:%S` done ls -tr reindex-* >> $script_dir/reindex.log echo " " >> $script_dir/reindex.log echo " " >> $script_dir/reindex.log ssmtp voce@exemplo.com.br < $script_dir/reindex.log rm -f $script_dir/tmp/reindex-*
Salve e mude o arquivo para executável:
chmod 777 reindex_pg.sh
Pode-se ainda agendá-lo para execução automática, adicionando no Contrab - Wilipedia. Exemplo:
crontab -e
Cole a linha:
00 05 * * * /home/postgres/rotinas/reindex.sh
Salve a alteração.
Obs.1: Para ser enviado o e-mail, o SSMTP tem que estar devidamente configurado, aqui no VOL tem vários tópicos sobre o assunto.
Obs.2: Os arquivos temporários serão criados no caminho /home/postgres/rotinas/log/tmp e o arquivo de log definitivo, será criado em /home/postgres/rotinas/log.
Agradecimentos especiais ao Caio Ferreira Dias por sua contribuição.