これは私のクローンタブです:
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
一度だけ呼び出すので、関数でラップする必要はありません。ただ直接呼び出すだけです。