2016-09-14 8 views
0

私はPostgreSQLサーバを稼働させているDebianシステムで作業しています。私はバックアップスクリプトを修正し、cronジョブをインストールしてデータベースの1時間ごとのバックアップをとり、それをフォルダに保存しました。それと並行して、スクリプトが実行され、3日以上経過したバックアップが削除されます。同じスクリプトを3台のサーバーにインストールしていて、バックアップが1つしかないことがわかりました。 15の代わりに、15時間が経過した。何が間違っているのですか、または削除スクリプトが間違っていますか?PostgreSQL:毎時ではなくバックアップを1回だけ作成するバックアップスクリプト

post_back.sh:

#! /bin/bash 
DUMPALL='/usr/bin/pg_dumpall' 
PGDUMP='/usr/bin/pg_dump' 
PSQL='/usr/bin/psql' 

# directory to save backups in, must be rwx by postgres user 
BASE_DIR='/media/attachment/backups/postgres' 
YMD=$(date "+%Y-%m-%d-%T") 
DIR="$BASE_DIR/$YMD" 
mkdir -p "$DIR" 
cd "$DIR" 

# get list of databases in system , exclude the tempate dbs 
DBS=($($PSQL --list --tuples-only | 
      awk '!/template[01]/ && $1 != "|" {print $1}')) 

# first dump entire postgres database, including pg_shadow etc. 
$DUMPALL --column-inserts | gzip -9 > "$DIR/db.out.gz" 

# next dump globals (roles and tablespaces) only 
$DUMPALL --globals-only | gzip -9 > "$DIR/globals.gz" 

# now loop through each individual database and backup the 
# schema and data separately 
for database in "${DBS[@]}" ; do 
    ALL="$DIR/$database.all.backup" 
#dump all 
    $PGDUMP -Fc "$database" > "$ALL" 
done 

# delete backup files older than 3 days 
echo deleting old backup files: 
find "$BASE_DIR/" -mindepth 1 -type d -mtime +3 -print0 | 
    xargs -0r rm -rfv 

cronジョブ:

0 * * * * ./home/postgres/post_back.sh 

lsコマンドバックアップディレクトリについて:

/media/attachment/backups/postgres # ls 
2016-09-13-14:00:01 

はありがとうございます。

+1

私を苛立たせることの1つは、あなたのクルージョブのパスの始まりにあるドットです。それは間違いですか?おそらく、データを書き込む前にcronジョブが失敗する可能性があります。 'cron'は通常、スクリプトが生成した出力を電子メールで送信します。 cronから電子メールを探して、デバッグ出力をスクリプトに広告して、何が間違っているかを把握してください。 –

+0

@LaurenzAlbe:どのように私はスクリプトの名前を呼び出すと、私はいくつかのブラケットのエラーをスローする、それは意味をなさないスクリプトを呼び出すしたいですか?そこで、./path/to/scriptを追加する必要がありました。電子メールについて私は複数のスクリプトを実行しているので、すべての電子メールをクリアしたので、メールが生成されるまで1時間待たなければなりません。スクリプトに追加できるものを教えてください。ありがとうございました。 –

+1

パス名とは別に、私はcronのオーバーランを避けるためのロック機構をいくつか追加します。 – wildplasser

答えて

1

問題は、crontabエントリのパスに先行する.です。

crontabに絶対パスを使用することをお勧めします。

+0

ありがとう....それは働いた.. :-) –

関連する問題