Скрипт для бекапа базы данных postgreSQL

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
cvetanet
проходил мимо
Сообщения: 6
Зарегистрирован: 2011-05-03 16:11:39
Контактная информация:

Скрипт для бекапа базы данных postgreSQL

Непрочитанное сообщение cvetanet » 2011-05-04 9:31:33

Мне необходимо написать скрипт для бекапа базы postgreSQL. Эти бекапы должны складываться в папку PostgreSQL и в имени файла должна присутствовать дата.
Есть скрипт backup.sh(см. ниже). Я запускаю его из терминала командой sh backup.sh. Но он запрашивает пароль пользователя из под которого я запускаю скрипт. В sudoers я прописала следующую строку:

Код: Выделить всё

user ALL=(ALL)NOPASSWD: /bin/sh, /usr/bin/sudo, /home/user/backup.sh
В sudoers есть строки

Код: Выделить всё

%admin ALL=(ALL) ALL
%sudo ALL=(ALL) ALL
Юзер "user" входит в группу admin
Но скрипт всё равно запрашивает пароль.

Скрипт backup.sh:

Код: Выделить всё

#!/bin/sh
# директория для размещения бекапов
BKPDIR="/home/svetlana/backup" 
# задаём переменную даты, которая затем будет отображаться в имени бекапа
DATEYMD=`date "+%Y-%m-%d-%a"` 
mkdir -p ${BKPDIR}/PostgreSQL 2>/dev/null # создаём директорию для баз postgreSQL
# делаем бекап
(sudo -u postgres pg_dump liferay <<EOF)| gzip -f -8 - >"${BKPDIR}/PostgreSQL/${DATEYMD}-liferay-PostgreSQL.gz"
*пароль к базе liferay*
EOF
Возможно я что-то делаю не так...Что и где нужно прописать чтобы пароль не запрашивался?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
bagas
лейтенант
Сообщения: 922
Зарегистрирован: 2010-08-18 19:49:01
Откуда: Воронеж
Контактная информация:

Re: Скрипт для бекапа базы данных postgreSQL

Непрочитанное сообщение bagas » 2011-05-04 10:06:47

Код: Выделить всё

%admin ALL=(ALL) NOPASSWD: ALL
возможно так?
Что бы ты не делал , жизнь слишком коротка!
Блог о BSD системах.

Аватара пользователя
cvetanet
проходил мимо
Сообщения: 6
Зарегистрирован: 2011-05-03 16:11:39
Контактная информация:

Re: Скрипт для бекапа базы данных postgreSQL

Непрочитанное сообщение cvetanet » 2011-05-04 10:11:58

Код: Выделить всё

%admin ALL=(ALL) NOPASSWD: ALL
С помощью этой строчки,насколько я понимаю, пользователям группы admin доступны все команды без введения пароля? мне бы, чтобы только мой пользователь user мог запускать этот скрипт без пароля.

Аватара пользователя
bagas
лейтенант
Сообщения: 922
Зарегистрирован: 2010-08-18 19:49:01
Откуда: Воронеж
Контактная информация:

Re: Скрипт для бекапа базы данных postgreSQL

Непрочитанное сообщение bagas » 2011-05-04 10:16:41

Код: Выделить всё

user  ALL=(ALL) NOPASSWD: ALL
Что бы ты не делал , жизнь слишком коротка!
Блог о BSD системах.

Аватара пользователя
cvetanet
проходил мимо
Сообщения: 6
Зарегистрирован: 2011-05-03 16:11:39
Контактная информация:

Re: Скрипт для бекапа базы данных postgreSQL

Непрочитанное сообщение cvetanet » 2011-05-04 10:23:50

Код: Выделить всё

user  ALL=(ALL) NOPASSWD: ALL
Не помогло- все равно просит пароль

Аватара пользователя
skeletor
майор
Сообщения: 2548
Зарегистрирован: 2007-11-16 18:22:04

Re: Скрипт для бекапа базы данных postgreSQL

Непрочитанное сообщение skeletor » 2011-05-04 11:52:52

Проблема заключается в том, что вы пробуете выполнять команды от юзера postgres, представляясь юзером user. По дефолту у юзера postgres нет пароля, то есть зайти под ним никак нельзя, только переключатся на него через su. А переключится ему позволит только root.
В итоге, 2 варианта
- выполнять скрипт от рута,
- извращаться так: выполнять команды от posgres, переключаясь на root'a от пользователя user.

Первый вариант лучше.

Аватара пользователя
cvetanet
проходил мимо
Сообщения: 6
Зарегистрирован: 2011-05-03 16:11:39
Контактная информация:

Re: Скрипт для бекапа базы данных postgreSQL

Непрочитанное сообщение cvetanet » 2011-05-04 14:06:17

а если есть пароль для юзера postgres? возможны ли другие варианты?

Аватара пользователя
skeletor
майор
Сообщения: 2548
Зарегистрирован: 2007-11-16 18:22:04

Re: Скрипт для бекапа базы данных postgreSQL

Непрочитанное сообщение skeletor » 2011-05-04 14:19:56

Лучше всего делать так. Добавить в /etc/crontab такую строку:

Код: Выделить всё

0 1 * * * postgres /path/to/backup.sh
в самом скрипте убрать sudo -u postgres
В итоге будет автоматом всё.


Аватара пользователя
cvetanet
проходил мимо
Сообщения: 6
Зарегистрирован: 2011-05-03 16:11:39
Контактная информация:

Re: Скрипт для бекапа базы данных postgreSQL

Непрочитанное сообщение cvetanet » 2011-05-04 14:40:54

Большое спасибо!!!Работает :good:
итого:
скрипт:

Код: Выделить всё

#!/bin/sh
BKPDIR="/home/svetlana/backup" 
DATEYMD=`date "+%Y-%m-%d-%a"` 
mkdir -p ${BKPDIR}/PostgreSQL 2>/dev/null 
(pg_dump liferay <<EOF)| gzip -f -8 - >"${BKPDIR}/PostgreSQL/${DATEYMD}-liferay-PostgreSQL.gz"
*пароль к базе liferay*
EOF
+строчка в crontab

Код: Выделить всё

01 18 * * * postgres /path/to/backup.sh