HanTengry
написал 7 мая 2009 года в 16:46 (3202 просмотра)
Ведет себя
как мужчина; открыл 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. Подскажите!
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
Что, если запустить скрипт из консоли именно так: «sh /u/copybase/script_copybase.sh» — работает? Нет ли там какой-нибудь зависимости от относительных путей?
А что с другими shell-скриптами через крон?
Нет ли чего интересного в логах крона?
>Что, если запустить скрипт из консоли именно так: «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 и если есть — запуск не осуществляется (либо убивается предыдущий процесс, либо идет ожидание его завершения, либо что-нибудь еще — зависит от задач).
в SLES, SLED, openSUSE именно тут надо искать информацию об ошибках cron.
правда, боюсь, там ничего интересного найти не удастся.
HanTengry, есть ощущение, что у тебя некорректны права на каталог /u и др.
давай посмотрим на вывод вот этот команды:
find /u -type d -exec l {} \;
> find /u -type d -exec l {} \;
Это что за команда такая интересная — «l»? :-)
Это сусевский alias для команды «ls -alF» ;). Правда, в указанной Эвилом конструкции этот алиас не отработает. Да и если из-под пользователя oracle «сам по себе скрипт-то запускается», то с правами должно быть всё в порядке.
Автору: попробуй в скрипте указать полный путь до 'exp’.
>Автору: попробуй в скрипте указать полный путь до '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..не пойму..здесь же копирую для ответа..или это просто шрифт такой..:), ой все, когда отправил уже нормально показывает оказывается
Может быть эта команда обязана выводиться в bash терминал(в окошко), а когда через скрипт тут как бы она в фоновом режиме будет работать и поэтому не срабатывает…извините за непрофессиональные изъяснения..
Ну да, команда у тебя cron’ом отрабатывается.
Слушай, а зачем ты в правила для cron добавил ’sh’? У тебя твой «/u/copybase/script.sh» исполняемый? Если да, то убери ’sh' из строки для cron, если нет — сделай исполняемым.
=))) Вообще-то там должна быть буква 'l' (строчная «Эль» латинская), а никакая не «вертикальная палка"! Вот Эвил породил дискуссию, блин =).
Да исполняемый файл, убирал и ставил 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.»
Что советуют делать? Прописать в крон:
Т.е. в данном случае это будет что-то вроде:
Блин..а я искал по запросу oracle exp linux.
Вот счастье! Работает! Спасибо Dmitry Shurupov!
Написал я правда в cron-е всю команду из скрипта..
Ой..что-то остановился что ли на пол пути экспорт..обновляю размер файлов не меняется..до этого менялся а еще закончен не до конца..проверю точнее отпишу..
Нет оказывается не остановился, все нормально, просто система сразу сформировала будущий размер файла, как я понял..
Интересно что подобное твориться и с командой 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
Э, я проверял на себе. Всё работало.
Потому что скорее всего crond запускается с параметром l9 (или больше) надо сделать l<9 и он начнет вести лог, поройтесь в стартовых скриптах где у вас crond запускается.