Форумы
Kalina LUG :: Форумы :: Основной :: General
 
<< Предыдущая тема | Следующая тема >>
Выполнение задания в окружении пользователя
Переход на страницу       >>  
Модераторы: kalina, sanitar, NaTty, COMRADE_ARTYOM, variable, Solaris, az, Andreyf1
Автор Добавил
Solaris
Чтв Сен 24 2009, 13:06

ID пользователя #22
Зарегистрирован: Втр Фев 26 2008, 15:15

Сообщений: 1559
Так как на прошедшей линуксовке не хватило времени на рассмотрение данной задачи выкладываю ее здесь.
Есть сервер баз данных Oracle, есть пользователи oracle, root. В Cron назвачил задание на выполнение в определенное время под пользователем oracle, и написал скрипт самого задания, то есть в определенное время запускается скрипт. Получается скрипт должен иметь права и параметры окружения пользователя oracle, но на самом деле он имеет окружение пользователя root.
Смысл скрипта в том чтобы: подключиться к базе данных, сделать shutdown, сделать резервную копию, затем startup. Чтобы сделать shutdown, затем startup нужно зайти под пользователем oracle, под root не получится, вот и в данном случае не получается.
Подскажите что можно сделать в данной ситуации?

[ Редактирование Пнд Окт 05 2009, 16:39 ]
Наверх
az
Чтв Сен 24 2009, 13:16

ID пользователя #30
Зарегистрирован: Сбт Мар 01 2008, 13:42

Сообщений: 273
Из вопроса не совсем понятно, дело в "под пользователем oracle, но на самом деле он имеет окружение пользователя root" либо в "чтобы сделать shutdown, затем startup нужно зайти под пользователем oracle, под root не получится".

Т.е. в окружении дело или в правах?

По окружению: crontab(5)
на предмет Environment Variable Settings

коротко:
An environment variable setting is of the form:
name = value
Наверх
Solaris
Чтв Сен 24 2009, 13:20

ID пользователя #22
Зарегистрирован: Втр Фев 26 2008, 15:15

Сообщений: 1559
Ну куда уж понятнее. Дело в том, что не происходит shutdown и startup, если задание запланировано в Cron, а если зайти под пользователем oracle и давать команды вручную все работает. Как я понимаю процесс, выполняющий запланированное задание наследует окружение пользователя root.
Наверх
az
Чтв Сен 24 2009, 13:40

ID пользователя #30
Зарегистрирован: Сбт Мар 01 2008, 13:42

Сообщений: 273
Solaris написал(а) ...

Как я понимаю процесс, выполняющий запланированное задание наследует окружение пользователя root.

Я всё же бы обратился к crontab(5) как и советовал выше.
Думаю, понимание после этого самоликвидируется

Всё сказанное относится к предположению, что проблема все же в окружении а не в правах, ибо вы так и не прояснили ситуацию.
Наверх
Solaris
Чтв Сен 24 2009, 13:51

ID пользователя #22
Зарегистрирован: Втр Фев 26 2008, 15:15

Сообщений: 1559
Из первого сообщения:
Получается скрипт должен иметь права и параметры окружения пользователя oracle, но на самом деле он имеет окружение пользователя root.

про окружение говорил, предполагал, еще почитаю man, за совет спасибо.
Наверх
variable
Чтв Сен 24 2009, 15:08

ID пользователя #17
Зарегистрирован: Вск Фев 24 2008, 10:28

Сообщений: 368
Дорогой Solaris, а ты как указываешь путь к командам? полностью?

Если нет, то попробуй с полными путями, так как в cron'e загружаются не все переменные окружения, как в оригинале у пользователя. PATH тоже совершенно другое значение имеет...

[ Редактирование Чтв Сен 24 2009, 15:09 ]
Наверх
Solaris
Чтв Сен 24 2009, 20:47

ID пользователя #22
Зарегистрирован: Втр Фев 26 2008, 15:15

Сообщений: 1559
Пути в командах примерно укамзываются так:
cd /var/oracle
connect
и прочее, пути в конфиге получается указаны.
Наверх
az
Чтв Сен 24 2009, 21:45

ID пользователя #30
Зарегистрирован: Сбт Мар 01 2008, 13:42

Сообщений: 273
написал(а) ...

cd /var/oracle

насколько есть необходимость в этом шаге?
написал(а) ...

connect

если это имя команды, то где же оно указано по совету variable с полным путём? (ну или хоть с относительным, если брать во внимание предыдущий шаг)

Итого: или таки задать всё же переменные окружения (особое внимание к $PATH) как надо согласно crontab(5) или таки действительно использовать пути к запускаемым утилитам.

Может есть недопонимание того, как запускаются утилиты?

hint: сделайте скрипт с себя в домашнем каталоге и попробуйте запустить.
что-то вроде:

$ echo -e '#!/bin/bash\necho yo!' > $HOME/proga.sh
$ chmod 755 $HOME/proga.sh
$ cd $HOME
$ proga.sh


запустится?
почему?
прояснить поможет bash(1) в районе COMMAND EXECUTION

а вот так?
$HOME/proga.sh
Наверх
Solaris
Птн Сен 25 2009, 10:10

ID пользователя #22
Зарегистрирован: Втр Фев 26 2008, 15:15

Сообщений: 1559
cd /var/oracle
насколько есть необходимость в этом шаге?

Сразу видно что с oracle почти не работали, это его специфика, надо перейти в рабочий каталог, если давать команды вручную без этого не работает.
connect

Аналогично. Это встроенная команда oracle, дается без путей.
Наверх
variable
Птн Сен 25 2009, 10:59

ID пользователя #17
Зарегистрирован: Вск Фев 24 2008, 10:28

Сообщений: 368
connect аналогичен make...

пропиши к connect полный путь - и все будет путём
Наверх
Solaris
Птн Сен 25 2009, 11:00

ID пользователя #22
Зарегистрирован: Втр Фев 26 2008, 15:15

Сообщений: 1559
connect аналогичен make

Уверен?
Наверх
az
Птн Сен 25 2009, 11:13

ID пользователя #30
Зарегистрирован: Сбт Мар 01 2008, 13:42

Сообщений: 273
Денис, давайте так. Мне очень сложно "угадывать" что у вас cоnnect -- то ли скрипт какой ваш, где описываются действия, то ли команда sqlplus-a, то ли alias какой, то ли ещё что. Давайте вы мне поможете, хорошо? А то уж столько времени уходит просто на выяснение обстоятельств дела Жалко

Давайте вы просто покажете свою запись в cron, чтоб было проще говорить. Пока мне видится
cd /var/oracle
сonnect

ну совершенно неосмысленным набором буковок.
Буду рад ошибаться. Жду написанное в cronе.

Хотя уже немного устал в этой теме

[ Редактирование Птн Сен 25 2009, 12:43 ]
Наверх
COMRADE_ARTYOM
Вск Сен 27 2009, 12:39
COMRADE_ARTYOM

ID пользователя #14
Зарегистрирован: Втр Фев 19 2008, 10:18

Сообщений: 863
честно сказать -- мне ОЧЕНЬ сомнительно, что cron выполняет все задания от имени суперпользователя. строчка из man cron:


cron searches its spool area (/var/spool/cron/crontabs) for crontab files (which are named after accounts in /etc/passwd); ...


даже если крон выполняет команды от имени рута -- можно дописать в нужное место sudo su oracle -c "команда"
придётся ещё попилить /etc/sudoers, чтобы оно не спрашивало пароль.
Наверх
Solaris
Вск Сен 27 2009, 13:10

ID пользователя #22
Зарегистрирован: Втр Фев 26 2008, 15:15

Сообщений: 1559
Как выяснилось дело не в правах рута, а в переменных окружения.
Наверх
az
Вск Сен 27 2009, 13:19

ID пользователя #30
Зарегистрирован: Сбт Мар 01 2008, 13:42

Сообщений: 273
Я рад, что наконец таки мы добрались да самого же первого совета, который вам был дан.

Но всё же для хоть какой-то полезности этой ветки не только для вас, но и для других, было бы полезно хотя бы в двух словах (лучше в коде) показать, что было сделано для того, чтоб задание начало заработать. Все же форум должен приносить пользу не только спрашивающим и отвечающим, но и потенциальным читателям.
Наверх
Solaris
Вск Сен 27 2009, 19:45

ID пользователя #22
Зарегистрирован: Втр Фев 26 2008, 15:15

Сообщений: 1559
Вот за это я и радел на всех линуксовках. Сейчас показать код не смогу, когда на работе появится время доработать код и залезть на сервер попробую выложить его.
До первого совета я сам подозревал что дело или в правах или в окружении. Спасибо всем за советы.
Наверх
Solaris
Пнд Сен 28 2009, 11:16

ID пользователя #22
Зарегистрирован: Втр Фев 26 2008, 15:15

Сообщений: 1559
Таки выкладываю код скрипта (немного поправил):

cd /var/oracle
ORACLE_SID=test
export ORACLE_SID
sqlplus "/as sysdba"
shutdown immediate
cp -r test ./backup
ORACLE_SID=test
export ORACLE_SID
sqlplus "/as sysdba"
startup

Вот в принципе и все. Что можно сказать по этому поводу?
Наверх
COMRADE_ARTYOM
Пнд Сен 28 2009, 11:17
COMRADE_ARTYOM

ID пользователя #14
Зарегистрирован: Втр Фев 19 2008, 10:18

Сообщений: 863
сразу же скажу, что экспорт можно писать в одну строчку:

export ORACLE_SID=test

и зачем два раза делать один и тот же экспорт?
Наверх
Solaris
Пнд Сен 28 2009, 11:31

ID пользователя #22
Зарегистрирован: Втр Фев 26 2008, 15:15

Сообщений: 1559
Надо попробовать, но думаю это проблему не решит.
Наверх
variable
Пнд Сен 28 2009, 11:34

ID пользователя #17
Зарегистрирован: Вск Фев 24 2008, 10:28

Сообщений: 368
Еще очень полезно для поиска ошибок смотреть, что же получает крон в результате выполнения...

Я знаю о существовании двух способов:

1. Крон весь вывод скрипта обычно отправляет на почту root'у или польозователю, от имени которого выполняется скрипт. Ну и эту почту можно прочитать кучей среств. я предпочитаю Mutt

2. Можно указать строчку следующего вида в кроне:
0 4 * * * /full/path/to/my/script.sh 2>>/tmp/cron.my.script.log >>/tmp/cron.my.script.log

Ну, я думаю, вы понимаете, что произойдет в данном случае (2-ой поток (поток ошибок) необходимо перенаправлять обязательно!!!)
Наверх
Переход на страницу       >>   

Перейти:     Наверх

Транслировать сообщения этой темы: rss 0.92 Транслировать сообщения этой темы: rss 2.0 Транслировать сообщения этой темы: RDF
Powered by e107 Forum System