2016-09-14 7 views
0

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 

감사합니다.

+1

나를 자극하는 한 가지는 당신의 cronjob에있는 경로의 시작 부분에있는 점입니다. 그게 실수 야? 아마도 cron 작업이 실패하기 전에 데이터를 쓸 수 있습니다. 'cron '은 일반적으로 스크립트가 생성 한 출력을 전자 메일로 보냅니다. cron에서 전자 메일을 찾아서 스크립트에 디버깅 출력을 보내어 무엇이 잘못되었는지 알아낼 수 있습니다. –

+0

@LaurenzAlbe : 어떻게하면 스크립트를 호출할까요, 내가 sh 스크립트 이름을 호출 할 때, 그것은 어떤 의미없는 브래킷 오류를 던졌습니다. 그래서 ./path/to/script를 추가해야했습니다. 이메일 정보. 여러 개의 스크립트가 실행 중이므로 지금은 모든 이메일을 지 웠습니다. 메일이 생성 되려면 1 시간을 기다려야합니다. 스크립트에 추가 할 수있는 것을 알려주시겠습니까? 고맙습니다. –

+1

경로명 외에도 cron 오버런을 피하기 위해 잠금 메커니즘을 추가 할 것입니다. – wildplasser

답변

1

문제는 crontab 항목의 경로에있는 .입니다.

crontab에 절대 경로를 사용하는 것이 좋습니다.

+0

고마워 .... 그게 .. ..-) 일했다. –