PostgreSQL 서버를 실행중인 데비안 시스템에서 작업하고 있습니다. 백업 스크립트를 수정하고 cron 작업을 설치하여 데이터베이스의 시간별 백업을 가져 와서 폴더에 저장했습니다. 이와 함께 3 일 이상 된 백업을 삭제하는 스크립트가 실행됩니다. 나는 동일한 스크립트를 3 대의 서버에 설치했고, 하나의 백업 만 존재한다는 것을 알았습니다. 15 시간 대신 15 시간이 경과했습니다. 무엇이 잘못 되었습니까? 아니면 삭제 스크립트가 잘못 되었습니까?PostgreSQL : 시간 대신 백업을 한 번만 작성하는 백업 스크립트
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
크론 작업 :
0 * * * * ./home/postgres/post_back.sh
ls 명령 백업 디렉토리에 대한 :
/media/attachment/backups/postgres # ls
2016-09-13-14:00:01
감사합니다.
나를 자극하는 한 가지는 당신의 cronjob에있는 경로의 시작 부분에있는 점입니다. 그게 실수 야? 아마도 cron 작업이 실패하기 전에 데이터를 쓸 수 있습니다. 'cron '은 일반적으로 스크립트가 생성 한 출력을 전자 메일로 보냅니다. cron에서 전자 메일을 찾아서 스크립트에 디버깅 출력을 보내어 무엇이 잘못되었는지 알아낼 수 있습니다. –
@LaurenzAlbe : 어떻게하면 스크립트를 호출할까요, 내가 sh 스크립트 이름을 호출 할 때, 그것은 어떤 의미없는 브래킷 오류를 던졌습니다. 그래서 ./path/to/script를 추가해야했습니다. 이메일 정보. 여러 개의 스크립트가 실행 중이므로 지금은 모든 이메일을 지 웠습니다. 메일이 생성 되려면 1 시간을 기다려야합니다. 스크립트에 추가 할 수있는 것을 알려주시겠습니까? 고맙습니다. –
경로명 외에도 cron 오버런을 피하기 위해 잠금 메커니즘을 추가 할 것입니다. – wildplasser