Para atender as boa práticas, vamos realizar as rotinas em diretório separado dos arquivos de dados que por padrão ficam no /var/lib/psql. Para padronizar a estrutura vamos criar a pasta backup_postgres e conceder acesso para escrita, gravação e leitura. Realizado isso, vamos criar os scripts shell que serão utilizados no crontab.
Antes da criação do arquivo shell vamos criar uma subpasta com o nome do banco de dados que será realizado o backup, assim vamos separar os dumps por pastas, neste caso estarei criando a subpasta postgres com o comando abaixo:
mkdir postgres
Após isso estarei concedendo acesso total a pasta:
chmod 777 postgres
Para criar o script shell vamos utilizar o VIM + nome do arquivo conforme mostrado abaixo:
vim backup_database_name.sh
Utilizei um padrão de váriaveis para a criação do shell onde informamos as seguintes váriaveis:
DATE= Váriavel que será utilizada para trazer data e hora no arquivo NOME= Nome do banco de dados HOST= Host/IP da máquina que está o postgres USER= usuário responsável pelo backup DATABASE= Nome do banco
Váriaveis com as informações:
DATE=$(/bin/date +%Y%m%d%H%M%S) NOME="postgres" HOST="192.168.0.1" USER="postgres" DATABASE="postgres"
Ainda no mesmo arquivo vamos escrever uma linha com o comando pg_dump conforme mostrado abaixo:
pg_dump -h $HOST -U $USER -d $DATABASE | gzip > “/backup_temp/backup_database/postgres/$NOME-$DATE.sql.gz”
Note a utilização do gzip, isso faz com que o arquivo seja criado já zipado. No final o arquivo deverá ficar com esse conteúdo:
#!/bin/sh # backup_postgres.sh DATE=$(/bin/date +%Y%m%d%H%M%S) NOME="postgres" HOST="192.168.0.1" USER="postgres" DATABASE="postgres" pg_dump -h $HOST -U $USER -d $DATABASE | gzip > "/backup_temp/backup_database/postgres/$NOME-$DATE.sql.gz"
Para salvar dê um ESC+x ou ESC_wq.
Vamos criar um novo arquivo para gerar um expurgo dos backups, vamos utilizar uma politíca de 7 dias de retenção de backup, podendo ser alterada a retenção somente com a alteração deste novo arquivo shell. Então, vamos criar o arquivo database_name_expurgo.sh.
vim database_name_expurgo.sh
Segue abaixo como ficará as váriaveis já preenchidas e o comando de remoção do arquivo:
#!/bin/sh # postgres_expurgo.sh DATE=$(/bin/date -d "-7day" +%Y%m%d) rm -rf /backup_temp/backup_database/postgres/postgres-"$DATE"*
Note que no final do arquivo temos um * ele representa que nesta pasta será removido todo o arquivo que inicie com o postgres e tenha a data “DATE=$(/bin/date -d “-7day” +%Y%m%d)” menor que 7. Por curiosidade se você executar no linux o comando da váriavel DATE terá um retorno como o mostrado abaixo:
20180321
Salve o arquivo e agora vamos configurar o crontab, execute o comando abaixo para abri-lo:
vim /etc/crontab
Inicialmente o crontab estará assim:

Básicamente o crontab é um agendador/executor de tarefas do linux e sua configuração é simples.
Valor 1 – Representa minutos
Valor 2 – Representa hora
Valor 3 – Dias do mês
Valor 4 – Meses do ano
Valor 5 – Dia da semana (segunda-feira, terça-feira, quarta-feira e etc)
Valor 6 – Usuário que irá executar o comando ou shell
Valor 7 – Comando (Em nosso caso local do arquivo shell)
O preenchimento do shell basicamente ficará assim:

Neste caso note que configure o contrab para executar o backup as 22:15, o usuário que irá executar é o root, o caminho do arquivo e sempre que utilizo o * indico que será todos, todos os dias do mês, todos os meses do ano e todos os dias da semana.