arquivo de backup localmente no shell script

2

Este é o meu crontab:

crontab -e
30 5 * * * sh /home/donato/Documents/pg_bak.sh

Todos os dias às 5:30 da manhã eu quero executar um script de shell que eu criei chamado pg_bak.sh.

Este é o conteúdo do script de shell:

#!/bin/bash

PG_USER=donato
DATABASE=mydb
SERVER=216.58.219.174
DIR="$HOME/pg_bak"
DATE=$(date +"%m_%d_%y")
FILE="$DATABASE_$DATE"
# pass @ .pgpass

PG_BAK_NOW () {
  pg_dump -h $SERVER -U $PG_USER $DATABASE -f $FILE.sql  
}

echo "Ready to dump to $FILE" >> "$HOME/pg_status" 

cd $DIR
if [ -f "$FILE" ];
then
  rm $FILE
  PG_BAK_NOW 
else
  PG_BAK_NOW
fi

Eu quero fazer backup do arquivo sql na minha máquina local em ~ / pg_bak, NÃO no servidor remoto. Em outras palavras, não quero fazer backup do arquivo no servidor remoto. O comando pg_dump estará sendo executado no contexto do computador em que estou executando ou a partir do servidor remoto?

    
por Donato 10.06.2016 / 11:18

1 resposta

0

Basta usar

pg_dump -h $SERVER -U $PG_USER $DATABASE > $FILE.sql 

para enviar o resultado do comando para a máquina local. Você pode querer canalizá-lo através do gzip ou similar, primeiro, para obter um dump menor.

Já estou aqui, algumas outras sugestões:

30 5 * * * /home/donato/Documents/pg_bak.sh

Você não precisa invocar sh para executar seu script, apenas dê a ele o bit de execução do proprietário.

E todo o pedaço de código no script imediatamente após o eco pode ser alterado para:

cd $DIR
rm $FILE 2>/dev/null
PG_BAK_NOW 

Na verdade, como agora você está invocando pg_dump apenas uma vez, não há necessidade de envolvê-lo em uma função. Basta chamá-lo diretamente.

    
por 10.06.2016 / 11:31