シェルスクリプトからローカルにファイルをバックアップする

シェルスクリプトからローカルにファイルをバックアップする

これは私のクローンタブです:

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

毎朝5時30分にpg_bak.shというシェルスクリプトを実行したいと思います。

シェルスクリプトの内容は次のとおりです。

#!/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

リモートサーバーではなく、ローカルコンピュータの〜/ pg_bakにあるSQLファイルをバックアップしたいと思います。つまり、リモートサーバー上のファイルをバックアップしたくありません。 pg_dumpコマンドは、リモートサーバーで実行されているマシンのコンテキストで実行されますか?

ベストアンサー1

ただ使用

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

コマンド結果をローカルシステムに出力します。より小さなダンプを取得するには、まずgzipまたは同様のものをパイプすることができます。

今ここに来たので、いくつかの他の提案をします。

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

スクリプトを実行するために呼び出しは必要なく、sh所有者の実行ビットを提供するだけです。

エコー直後にスクリプトの完全なコードブロックは、次のように変更されることがあります。

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

実際、今はpg_dump一度だけ呼び出すので、関数でラップする必要はありません。ただ直接呼び出すだけです。

おすすめ記事