私は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つは、あなたのクルージョブのパスの始まりにあるドットです。それは間違いですか?おそらく、データを書き込む前にcronジョブが失敗する可能性があります。 'cron'は通常、スクリプトが生成した出力を電子メールで送信します。 cronから電子メールを探して、デバッグ出力をスクリプトに広告して、何が間違っているかを把握してください。 –
@LaurenzAlbe:どのように私はスクリプトの名前を呼び出すと、私はいくつかのブラケットのエラーをスローする、それは意味をなさないスクリプトを呼び出すしたいですか?そこで、./path/to/scriptを追加する必要がありました。電子メールについて私は複数のスクリプトを実行しているので、すべての電子メールをクリアしたので、メールが生成されるまで1時間待たなければなりません。スクリプトに追加できるものを教えてください。ありがとうございました。 –
パス名とは別に、私はcronのオーバーランを避けるためのロック機構をいくつか追加します。 – wildplasser