nixp.ru v3.0

21 января 2017,
суббота,
16:17:45 MSK

DevOps с компанией «Флант»
HanTengry написал 7 мая 2009 года в 16:46 (2030 просмотров) Ведет себя как мужчина; открыл 36 тем в форуме, оставил 111 комментарий на сайте.

Есть скрипт script_copybase.sh

Содержимое:

#!/bin/bash

exp system/ibso@ibso file=/u/copybase/monday/ibs_test.dmp log=/u/copybase/monday/ibs_testexp.log full=Y

exit

При запуске его под пользователем oracle, сам по себе скрипт-то запускается. Делает экспотр базы согласно указаным выше путям.

Добавляю в cron следующие строки (периодичность мне пока не суть важна):

* */5 * * * * oracle sh /u/copybase/script_copybase.sh

Не работает. Ссылка на скрипт правильная 100%.

Пробовал вместо sh /u/copybase/script_copybase.sh, вписывать другую команду, например mkdir (чего нибудь), срабатывает..я грешил до этого на пользователя oracle..Права на файл скрипта полные, владелец oracle. Подскажите!

Дмитрий Шурупов

Что, если запустить скрипт из консоли именно так: «sh /u/copybase/script_copybase.sh» — работает? Нет ли там какой-нибудь зависимости от относительных путей?

А что с другими shell-скриптами через крон?

Нет ли чего интересного в логах крона?

HanTengry

>Что, если запустить скрипт из консоли именно так: «sh >/u/copybase/script_copybase.sh» — работает? Нет ли там >какой-нибудь зависимости от относительных путей?

Работает без локтя после sh который вы указали в примере выше(только ежели пользователь oracle запускает, это так и должно быть). Не знаю как проверить такие зависимости.

>А что с другими shell-скриптами через крон?

Создал скрипт (разрешения на него по аналогии, владелец oracle), содержимое mkdir /u/copybase/mondey/test, каталог там появился, скрипт работает через cron все верно..

>Нет ли чего интересного в логах крона?

Знать бы где они лежат в — /var/log нету ни папки cron ни файла..(SUSE SLES9)

Еще хотел выяснить момент. Как будет вести себя крон если предыдущий запущенный процесс командой из скрипта еще не отработал а уже начилось время следующего цикла этого же процесса. Ну то есть идет экспорт базы 10 минут, а в crone стоит что от должен запускать экспорт каждые пять минут?

Дмитрий Шурупов

> Работает без локтя после sh который вы указали в примере выше

Э, в моем посте нет никакого «локтя» :-) Неважно, его и не должно там быть…

> Знать бы где они лежат в — /var/log нету ни папки cron ни файла..(SUSE SLES9)

Конкретно про SLES ничего сказать не могу, но обычно он в syslog пишет, т.е. в /var/log/messages.

> Как будет вести себя крон если предыдущий запущенный процесс командой из скрипта еще не отработал а уже начилось время следующего цикла этого же процесса. Ну то есть идет экспорт базы 10 минут, а в crone стоит что от должен запускать экспорт каждые пять минут?

cron не будет проверять, выполнилось ли предыдущее задание, и запустит новое — это грозит проблемами, если не учтено в самом скрипте.

Обычно в таких случаях в самом скрипте в момент его запуска создают какой-нибудь файл вроде /var/run/foo-bar.pid, а по завершении — файл удаляют. Естественно, при старте скрипта еще тогда и проверяют, нет ли уже этого файла pid и если есть — запуск не осуществляется (либо убивается предыдущий процесс, либо идет ожидание его завершения, либо что-нибудь еще — зависит от задач).

Dr. Evil
Dmitry Shurupov
Конкретно про SLES ничего сказать не могу, но обычно он в syslog пишет, т.е. в /var/log/messages.

в SLES, SLED, openSUSE именно тут надо искать информацию об ошибках cron.

правда, боюсь, там ничего интересного найти не удастся.

HanTengry, есть ощущение, что у тебя некорректны права на каталог /u и др.

давай посмотрим на вывод вот этот команды:

find /u -type d -exec l {} \;

Дмитрий Шурупов

> find /u -type d -exec l {} \;

Это что за команда такая интересная — «l»? :-)

fly4life
Dmitry Shurupov
> find /u -type d -exec l {} \;

Это что за команда такая интересная — «l»? :-)

Это сусевский alias для команды «ls -alF» ;). Правда, в указанной Эвилом конструкции этот алиас не отработает. Да и если из-под пользователя oracle «сам по себе скрипт-то запускается», то с правами должно быть всё в порядке.

Автору: попробуй в скрипте указать полный путь до 'exp’.

HanTengry

>Автору: попробуй в скрипте указать полный путь до 'exp’.

Не отрабатывает. Команда находиться здесь /u/app/oracle/product/9.2.0/bin/.

Эх, какая-то особенность у этого exp есть. Одно знаю что это утилита оракловская, а не обычная команда.

В логе messages есть это:

May 8 08:26:01 standby /USR/SBIN/CRON[1892]: (oracle) CMD (sh /u/copybase/script.sh)

> find /u -type d -exec | {} \;

Действительно не запускается пишет bash: {}: command not found

find: missing  argument to `-exec'

P.S. наверно модератору вопрос когда копирую команду приведеную Dr. Evil, вот — find /u -type d -exec l {} \; то вместо палки вертикальной перед фигурными скобками вижу еденицу..или L..не пойму..здесь же копирую для ответа..или это просто шрифт такой..:), ой все, когда отправил уже нормально показывает оказывается

HanTengry

Может быть эта команда обязана выводиться в bash терминал(в окошко), а когда через скрипт тут как бы она в фоновом режиме будет работать и поэтому не срабатывает…извините за непрофессиональные изъяснения..

fly4life
HanTengry
>Автору: попробуй в скрипте указать полный путь до 'exp’.

Не отрабатывает. Команда находиться здесь /u/app/oracle/product/9.2.0/bin/.

Эх, какая-то особенность у этого exp есть. Одно знаю что это утилита оракловская, а не обычная команда.

В логе messages есть это:

May 8 08:26:01 standby /USR/SBIN/CRON[1892]: (oracle) CMD (sh /u/copybase/script.sh)

Ну да, команда у тебя cron’ом отрабатывается.

Слушай, а зачем ты в правила для cron добавил ’sh’? У тебя твой «/u/copybase/script.sh» исполняемый? Если да, то убери ’sh' из строки для cron, если нет — сделай исполняемым.

HanTengry
> find /u -type d -exec | {} \;

Действительно не запускается пишет bash: {}: command not found

find: missing  argument to `-exec'

P.S. наверно модератору вопрос когда копирую команду приведеную Dr. Evil, вот — find /u -type d -exec l {} \; то вместо палки вертикальной перед фигурными скобками вижу еденицу..или L..не пойму..здесь же копирую для ответа..или это просто шрифт такой..:), ой все, когда отправил уже нормально показывает оказывается

=))) Вообще-то там должна быть буква 'l' (строчная «Эль» латинская), а никакая не «вертикальная палка"! Вот Эвил породил дискуссию, блин =).

HanTengry

Да исполняемый файл, убирал и ставил sh — не работает.

Если он выполняется cron-ом, что из этого следует? Можно как-то обмануть, написав скрипт типа так: открыть окошко терминала, вбить строку exp как есть туда, нажать Enter..но как бы все это в командах..

Дмитрий Шурупов

В общем, да — специфика Oracle. Первый запрос в гугл «oracle exp cron» выдал мне http://lists.suse.com/archive/suse-oracle/2004-Oct/0090.html

А там… Итак: почему не работает? «The reason it wont work is because the environment variables (ORACLE_HOME, etc etc) are not set in the cron environment.»

Что советуют делать? Прописать в крон:

su - oracle -c "КОМАНДА"

Т.е. в данном случае это будет что-то вроде:

su - oracle -c "sh /u/copybase"
HanTengry

Блин..а я искал по запросу oracle exp linux.

Вот счастье! Работает! Спасибо Dmitry Shurupov!

Написал я правда в cron-е всю команду из скрипта..

Ой..что-то остановился что ли на пол пути экспорт..обновляю размер файлов не меняется..до этого менялся а еще закончен не до конца..проверю точнее отпишу..

Нет оказывается не остановился, все нормально, просто система сразу сформировала будущий размер файла, как я понял..

HanTengry

Интересно что подобное твориться и с командой date.

Вписываю команду в cron, хочу создать директорию с текущей датой mkdir /u/copybase/`date +’%d%m%Y’`. Не работает. Если просто написать например /u/copybase/directory — то работает. Команда mkdir /u/copybase/`date +’%d%m%Y’` — срабатывает не через cron нормально..предыдущий совет su — oracle -c «КОМАНДА» не помогает.. погуглил кажеться нашел — процент это перевод строки его нужно защищать слешем date «+\%F news:». http://www.unixfaq.ru/index.pl?req=qs&id=516

Dr. Evil
fly4life
Правда, в указанной Эвилом конструкции этот алиас не отработает.

Э, я проверял на себе. Всё работало.

splinter
Знать бы где они лежат в — /var/log нету ни папки cron ни файла..(SUSE SLES9)


в SLES, SLED, openSUSE именно тут надо искать информацию об ошибках cron.

правда, боюсь, там ничего интересного найти не удастся.


Потому что скорее всего crond запускается с параметром l9 (или больше) надо сделать l<9 и он начнет вести лог, поройтесь в стартовых скриптах где у вас crond запускается.

ecobeingecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.