在cron中备份postgres数据库的问题

时间:2015-01-12 23:57:18

标签: postgresql ubuntu crontab postgresql-9.2 postgresql-9.3

我正在尝试备份postgres数据库。我正在运行一个cron工作。问题是postgres在用户postgres下运行,我不认为我可以在ubuntu用户下运行cron作业。我试图在postgres用户下创建一个cron作业,但也没有用。我的脚本,如果登录为postgres用户工作正常。 这是我的剧本

#!/bin/bash
# Location to place backups.
backup_dir="/home/postgres-backup/"
#String to append to the name of the backup files
backup_date=`date +%d-%m-%Y`
#Numbers of days you want to keep copie of your databases
number_of_days=30
databases=`psql -l -t | cut -d'|' -f1 | sed -e 's/ //g' -e '/^$/d'`
for i in $databases; do
  if [ "$i" != "template0" ] && [ "$i" != "template1" ]; then
    echo Dumping $i to $backup_dir$i\_$backup_date
    pg_dump -Fc $i > $backup_dir$i\_$backup_date
  fi
done
find $backup_dir -type f -prune -mtime +$number_of_days -exec rm -f {} \;

如果我这样做

sudo su - postgres

我看到了

-rwx--x--x 1 postgres postgres  570 Jan 12 20:48 backup_all_db.sh

当我做的时候

./backup_all_db.sh

它会在/home/postgres-backup/

中备份

然而,使用cronjob它无法正常工作,无论我是在postgres下还是在ubuntu下添加cron作业。

这是我的cronjob

0,30 * * * * /var/lib/pgsql/backup_all_db.sh 1> /dev/null 2> /home/cron.err

非常感谢任何帮助

1 个答案:

答案 0 :(得分:3)

允许用户运行cron作业

如果/etc/cron.allow文件存在,则必须在其中列出用户才能运行crontab命令。如果/etc/cron.allow文件不存在但/etc/cron.deny文件不存在,则不能在/etc/cron.deny文件中列出用户以运行crontab。

如果两个文件都不存在,那么当前Ubuntu(和Debian,但不是其他一些Linux和UNIX系统)的默认设置是允许所有用户使用crontab运行作业。

添加cron作业

使用此命令为当前用户添加cron作业:

crontab -e

使用此命令为指定用户添加cron作业(需要权限):

crontab -u <user> -e

补充阅读

man 5 crontab

Ubuntu中的Crontab:https://help.ubuntu.com/community/CronHowto