我正在尝试备份 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/
中备份
然而,无论我是在 postgres 下还是在 ubuntu 下添加 cron 作业,cronjob 都不起作用。
这是我的定时任务
0,30 * * * * /var/lib/pgsql/backup_all_db.sh 1> /dev/null 2> /home/cron.err
将不胜感激
最佳答案
允许用户运行 cron 作业
如果 /etc/cron.allow
文件存在,则必须在其中列出用户才能允许运行 crontab 命令。如果 /etc/cron.allow
文件不存在但 /etc/cron.deny
文件存在,则用户不能列在 /etc 中/cron.deny
文件以运行 crontab。
在两个文件都不存在的情况下,当前 Ubuntu(和 Debian,但不是某些其他 Linux 和 UNIX 系统)的默认设置是允许所有用户使用 crontab 运行作业。
添加定时任务
使用此命令为当前用户添加一个 cron 作业:
crontab -e
使用此命令为指定用户添加一个 cron 作业(需要权限):
crontab -u <user> -e
补充阅读
man 5 crontab
Ubuntu 中的 Crontab:https://help.ubuntu.com/community/CronHowto
关于postgresql - 在 cron 中备份 postgres 数据库的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27912844/