2016-09-14 61 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

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