Форумы
Kalina LUG :: Форумы :: Основной :: General |
|
<< Предыдущая тема | Следующая тема >> |
Выполнение задания в окружении пользователя |
Переход на страницу >> | |
Модераторы: kalina, sanitar, NaTty, COMRADE_ARTYOM, variable, Solaris, az, Andreyf1
|
Автор | Добавил | ||
Solaris |
|
||
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 |
|
||
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 |
|
||
ID пользователя #22
Зарегистрирован: Втр Фев 26 2008, 15:15Сообщений: 1559 |
Ну куда уж понятнее. Дело в том, что не происходит shutdown и startup, если задание запланировано в Cron, а если зайти под пользователем oracle и давать команды вручную все работает. Как я понимаю процесс, выполняющий запланированное задание наследует окружение пользователя root. | ||
Наверх |
|
||
az |
|
||
ID пользователя #30
Зарегистрирован: Сбт Мар 01 2008, 13:42Сообщений: 273 |
Solaris написал(а) ... Как я понимаю процесс, выполняющий запланированное задание наследует окружение пользователя root. Я всё же бы обратился к crontab(5) как и советовал выше. Думаю, понимание после этого самоликвидируется Всё сказанное относится к предположению, что проблема все же в окружении а не в правах, ибо вы так и не прояснили ситуацию. |
||
Наверх |
|
||
Solaris |
|
||
ID пользователя #22
Зарегистрирован: Втр Фев 26 2008, 15:15Сообщений: 1559 |
Из первого сообщения: Получается скрипт должен иметь права и параметры окружения пользователя oracle, но на самом деле он имеет окружение пользователя root. про окружение говорил, предполагал, еще почитаю man, за совет спасибо. |
||
Наверх |
|
||
variable |
|
||
ID пользователя #17
Зарегистрирован: Вск Фев 24 2008, 10:28Сообщений: 368 |
Дорогой Solaris, а ты как указываешь путь к командам? полностью? Если нет, то попробуй с полными путями, так как в cron'e загружаются не все переменные окружения, как в оригинале у пользователя. PATH тоже совершенно другое значение имеет... [ Редактирование Чтв Сен 24 2009, 15:09 ] |
||
Наверх |
|
||
Solaris |
|
||
ID пользователя #22
Зарегистрирован: Втр Фев 26 2008, 15:15Сообщений: 1559 |
Пути в командах примерно укамзываются так: cd /var/oracle connect и прочее, пути в конфиге получается указаны. |
||
Наверх |
|
||
az |
|
||
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
запустится? почему? прояснить поможет bash(1) в районе COMMAND EXECUTION а вот так?
$HOME/proga.sh
|
||
Наверх |
|
||
Solaris |
|
||
ID пользователя #22
Зарегистрирован: Втр Фев 26 2008, 15:15Сообщений: 1559 |
cd /var/oracle насколько есть необходимость в этом шаге? Сразу видно что с oracle почти не работали, это его специфика, надо перейти в рабочий каталог, если давать команды вручную без этого не работает. connect Аналогично. Это встроенная команда oracle, дается без путей. |
||
Наверх |
|
||
variable |
|
||
ID пользователя #17
Зарегистрирован: Вск Фев 24 2008, 10:28Сообщений: 368 |
connect аналогичен make... пропиши к connect полный путь - и все будет путём |
||
Наверх |
|
||
Solaris |
|
||
ID пользователя #22
Зарегистрирован: Втр Фев 26 2008, 15:15Сообщений: 1559 |
connect аналогичен make Уверен? |
||
Наверх |
|
||
az |
|
||
ID пользователя #30
Зарегистрирован: Сбт Мар 01 2008, 13:42Сообщений: 273 |
Денис, давайте так. Мне очень сложно "угадывать" что у вас cоnnect -- то ли скрипт какой ваш, где описываются действия, то ли команда sqlplus-a, то ли alias какой, то ли ещё что. Давайте вы мне поможете, хорошо? А то уж столько времени уходит просто на выяснение обстоятельств дела Жалко Давайте вы просто покажете свою запись в cron, чтоб было проще говорить. Пока мне видится
cd /var/oracle
ну совершенно неосмысленным набором буковок. Буду рад ошибаться. Жду написанное в cronе. Хотя уже немного устал в этой теме [ Редактирование Птн Сен 25 2009, 12:43 ] |
||
Наверх |
|
||
COMRADE_ARTYOM |
|
||
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 |
|
||
ID пользователя #22
Зарегистрирован: Втр Фев 26 2008, 15:15Сообщений: 1559 |
Как выяснилось дело не в правах рута, а в переменных окружения. | ||
Наверх |
|
||
az |
|
||
ID пользователя #30
Зарегистрирован: Сбт Мар 01 2008, 13:42Сообщений: 273 |
Я рад, что наконец таки мы добрались да самого же первого совета, который вам был дан. Но всё же для хоть какой-то полезности этой ветки не только для вас, но и для других, было бы полезно хотя бы в двух словах (лучше в коде) показать, что было сделано для того, чтоб задание начало заработать. Все же форум должен приносить пользу не только спрашивающим и отвечающим, но и потенциальным читателям. |
||
Наверх |
|
||
Solaris |
|
||
ID пользователя #22
Зарегистрирован: Втр Фев 26 2008, 15:15Сообщений: 1559 |
Вот за это я и радел на всех линуксовках. Сейчас показать код не смогу, когда на работе появится время доработать код и залезть на сервер попробую выложить его. До первого совета я сам подозревал что дело или в правах или в окружении. Спасибо всем за советы. |
||
Наверх |
|
||
Solaris |
|
||
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 |
|
||
COMRADE_ARTYOM ID пользователя #14
Зарегистрирован: Втр Фев 19 2008, 10:18Сообщений: 863 |
сразу же скажу, что экспорт можно писать в одну строчку: export ORACLE_SID=test и зачем два раза делать один и тот же экспорт? |
||
Наверх |
|
||
Solaris |
|
||
ID пользователя #22
Зарегистрирован: Втр Фев 26 2008, 15:15Сообщений: 1559 |
Надо попробовать, но думаю это проблему не решит. | ||
Наверх |
|
||
variable |
|
||
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-ой поток (поток ошибок) необходимо перенаправлять обязательно!!!) |
||
Наверх |
|
||
Переход на страницу >> | |
Powered by e107 Forum System