проблемы с резервным копированием баз данных postgres в cron

Я пытаюсь сделать резервную копию баз данных postgres. Я запускаю задание cron, чтобы сделать это. Проблема в том, что postgres работает под пользователем postgres, и я не думаю, что смогу запустить задание cron под пользователем ubuntu. Я попытался создать задание cron под пользователем postgres, но это тоже не сработало. Мой скрипт, если войти в систему как пользователь 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 {} \;

if I do

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 он не работает, независимо от того, добавляю ли я задание cron под postgres или под ubuntu.

вот мой хронджоб

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

Будем признательны за любую помощь


person Asim Zaidi    schedule 12.01.2015    source источник
comment
Почему обратный слеш? почему бы не использовать ${backup_dir} и т. д.?   -  person wildplasser    schedule 13.01.2015
comment
/home обычно принадлежит root, в конечном итоге ваши пользователи не смогут писать в /home/cron.err. Что произойдет, если вы просто используете 0,30 * * * * /var/lib/pgsql/backup_all_db.sh ?   -  person cur4so    schedule 13.01.2015


Ответы (1)


Разрешить пользователю запускать задания 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

Crontab в Ubuntu: https://help.ubuntu.com/community/CronHowto

person user1766169    schedule 13.01.2015