2016-09-14 143 views
0

我正在使用Debian系統,在那裏運行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 

cron作業:

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

謝謝....它工作.. :-) –