The UNIX and Linux Forums  
Здравствуйте и добро от Соединенных Штатов UNIX и Linux Форумы! Благодарим Вас за посещение и вступления нашей мирового сообщества.

Go Back   В UNIX и Linux Форумы > Топ форумы > Shell программирование и сценарии
.
Google unix.com



Shell программирование и сценарии Почтовые вопросы о KSH, CSH, SH, BASH, Perl, PHP, SED, AWK и скрипты оболочки и оболочки скриптовых языков здесь.

Подробнее UNIX и Linux Темы форума можно найти полезные
Нить Резьба для начинающих Форум Ответы Последнее сообщение
Распакуйте частности GZIP файлов среди нормальных файлов данных thepurple Shell программирование и сценарии 4 11-30-2007 11:17 AM
GZIP все файлы в директории er_ashu UNIX для чайников Вопросы И Ответы 2 11-06-2007 09:05 AM
Необходимость GZIP больших файлов LordJezo UNIX для чайников Вопросы И Ответы 2 05-02-2005 04:18 PM
GZIP, несколько файлов smbodnar UNIX для чайников Вопросы И Ответы 2 11-11-2002 04:29 PM
Два файлы, созданные на каждого? Атама UNIX для чайников Вопросы И Ответы 1 04-12-2002 04:44 PM

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered By Powered by Google
 
LinkBack Резьба Инструменты Искать в этом Thread Оценить Thread Режимы дисплея
Old 10-13-2008
eisenhorn eisenhorn is offline
Зарегистрированный пользователь
  
 

Регистрация: Oct 2008
Сообщений: 3
GZip файлов, как они создали

Здравствуйте. У меня есть сценарии запросов, что я тупик, в который я надеюсь, что вы можете помочь с.

В принципе, у меня есть KSH скрипт, который называет процесс создания Н Число двоичных файлов. Эти файлы имеют максимальный размер 1Gb. Этот процесс может написать Н Количество файлов сразу (параллельная работа) на основе параметров paralellisation учтены сценария в самом начале. Как правило, мы будем ждать этот процесс завершить, а затем GZIP все файлы по отдельности (GZIP *. DMP, например). Тем не менее, на некоторых системах у нас нет достаточно места на диске подождать, пока все файлы 1Gb были подготовлены.

Я уже написал несколько код GZIP файлов параллельно (см. ниже), однако, я сейчас необходимо GZIP их параллельно, а первый процесс идет. Мне нужно быть осторожными, не пытаться GZIP любые файлы, в настоящее время пишется (до Н Параллельно с командой), так что определенный цикл будет необходимо. И я хочу сохранить возможность параллельно GZIP, если это возможно.

Код:
...
gzip_func() {
started=0
threads=4
for filename in `ls -1 ${EXP_DIR}/*.dmp`
do
 if [[ ${started} -lt ${threads} ]]; then
  let started=started+1
  echo "gzip ${filename}"
  ( $GZIPCMD ${filename} ) &
  list_of_pids="${list_of_pids} $!"
 else
  print "wait ${list_of_pids}"
  wait ${list_of_pids}
  list_of_pids=""
  started=0
 fi
done
}
...
my_binary_file_creation_process
...
while [ `find ${EXP_DIR} -name \*.dmp|wc -l` -gt "0" ]; do
 gzip_func
 print "wait ${list_of_pids}"
 wait ${list_of_pids}
 list_of_pids=""
done
Может кто поможет мне написать код для этого, используя стандартные средства ОС Solaris 8/9/10 помощью оболочки Korn. Perl Команды должны быть (Vers 5.6.1 установлен).

Большое спасибо и наилучшими пожеланиями,
Стивен.
Old 10-13-2008
cfajohnson's Avatar
cfajohnson cfajohnson is offline Forum Advisor  
Shell программист, автор
  
 

Регистрация: Mar 2007
Место проведения: Торонто, Канада
Сообщения: 2361
Цитата:
Первоначально Послано eisenhorn View Post
Код:
...
gzip_func() {
started=0
threads=4
for filename in `ls -1 ${EXP_DIR}/*.dmp`

Не только это -1 ненужным, но это Ls себя. Также, Ls будет разорвать ваш сценарий, если Существуют какие-либо пробелы в именах файлов.

Код:
for filename in ${EXP_DIR}/*.dmp
Цитата:
Код:
do
 if [[ ${started} -lt ${threads} ]]; then
  let started=started+1

Использование стандарта синтаксис:

Код:
 if [ ${started} -lt ${threads} ]; then
 started=$(( $started + 1 ))
Цитата:
Код:
  echo "gzip ${filename}"
  ( $GZIPCMD ${filename} ) &

Цитировать переменной, или ваш сценарий будет разорвать, если Существуют пробелы в имени файла (и нет необходимости в скобках):

Код:
  $GZIPCMD "$filename" &
Цитата:
Код:
  list_of_pids="${list_of_pids} $!"
 else
  print "wait ${list_of_pids}"
  wait ${list_of_pids}
  list_of_pids=""
  started=0
 fi
done
}
...
my_binary_file_creation_process
...
while [ `find ${EXP_DIR} -name \*.dmp|wc -l` -gt "0" ]; do

Что плохого в:

[код]
для
Цитата:
Код:
 gzip_func
 print "wait ${list_of_pids}"
 wait ${list_of_pids}
 list_of_pids=""
done
Может кто поможет мне написать код для этого, используя стандартные средства ОС Solaris 8/9/10 помощью оболочки Korn. Perl Команды должны быть (Vers 5.6.1 установлен).

Ваш код выглядит гораздо более сложной, чем это необходимо.

Не совсем ясно из вашего кода, как вы говорите ли файл закончена записываются так, что Вы можете сжать его.

Есть ли у вас какой-либо контроль за процессом, который в письменном виде бинарных файлов?
Old 10-14-2008
eisenhorn eisenhorn is offline
Зарегистрированный пользователь
  
 

Регистрация: Oct 2008
Сообщений: 3
Благодаря cfajohnson. Я постараюсь включить ваши рекомендации.

Однако, по моему реальные проблемы, Oracle утилиты экспорта (процесс, который создает бинарные файлы) будет создан файл, а затем заполнить ее данными вверх, пока он не достигнет 1Gb по размеру, то это создаст новый файл. Если мы используем parallelisation, она будет создавать Н Количество файлов (по одному для каждого параллельного процесса), и заполнить их. Окончательный бинарных файлов, создаваемых и, вероятно, мог бы быть меньше 1Gb.

Моя мысль заключалась в том, чтобы вызвать GZIP функции до утилиты экспорта, а затем его ждут файлы GZIP, т.е. только если GZIP файлов Есть больше, чем число параллельных Н. Так что, если параллельно был установлен на 4, только 5 GZIP файл.

Мышление его, мне трудно определить, какой файл в GZIP программа должна GZIP, как мы можем не только ZIP-файлов 1Gb по размеру, как она все равно может быть отделка письменном виде файла и т.д. Можно ли использовать нечто вроде термического определить, если экспорт инструмент закончил с файлом? Возможно, некоторые формы цикл GZIP, что ждет за термического возвращаться не PID для экспорта файла и затем застежек-молний это? Я посмотрел на экспорт и видим, что, когда утилита закончили написание файла он не блокирует так это может быть осуществимо.

Я хотела бы получить ваши идеи.

С уважением.
Old 10-14-2008
cfajohnson's Avatar
cfajohnson cfajohnson is offline Forum Advisor  
Shell программист, автор
  
 

Регистрация: Mar 2007
Место проведения: Торонто, Канада
Сообщения: 2361

Как только новый файл будет создан, вы можете GZIP предыдущего.
Old 10-15-2008
eisenhorn eisenhorn is offline
Зарегистрированный пользователь
  
 

Регистрация: Oct 2008
Сообщений: 3
Цитата:
Первоначально Послано cfajohnson View Post
Как только новый файл будет создан, вы можете GZIP предыдущего.
Не самое информативное заявление но я понимаю, что вы имеете в виду.

Я сделал некоторые игры и обнаружили, что экспорт будет создан файл 4k первоначально, а затем прекратить ее использование, а это создает список объектов, на экспорт. После этого он возвращает блокировку на файл, и заполняет файл до 1gb размера.

Я изменить мою код использовать дю и термического тест, чтобы убедиться, что файл был больше, чем 4k, а не используются какие-либо пользователем. Я считаю, что если я использовать параллелизм на экспорт будет создана Н количество файлов, а затем заполнить их, он может начать с файлами 1,2,3 и 4, а 1,3 и 4 внезапно достичь 1Gb поэтому создает 5,6,7 продолжать параллельные задачи. файл 2 пока еще не полностью (по какой причине).

Файлы 1,3 и 4 в настоящее время неиспользуемые но gzip_func-видимому, не хотят GZIP файлов до тех пор, пока файл 2 также неиспользованные - которая зачастую может быть не до конца экспорт. Не могли бы Вы, пожалуйста, обратите внимание на приведенный ниже код и посмотреть, если вы можете пятно очевидную ошибку? Я хочу, чтобы код действительно начала gzipping, когда 2-тесты прошли, независимо от того, она может лишь GZIP 1 файл или до Н нитей. Любые идеи?

Код:
gzip_func() {
started=0
threads=4
for filename in ${EXP_DIR}/*.dmp
do
 # Check if file is bigger than 8K and is not being used
 if [ `du -sk "${filename}"|awk '{print $1}'` -gt "8" ] && [ `fuser "${filename}" 2>/dev/null | wc -m` -eq "0" ]; then
   # Loop through files until 4 are started (to match threads)
   if [ ${started} -lt ${threads} ]; then
    started=$(( $started + 1 ))
    echo "gzip ${filename}"
    $GZIPCMD "${filename}" &
    list_of_pids="${list_of_pids} $!"
   else
    print "wait ${list_of_pids}"
    wait ${list_of_pids}
    list_of_pids=""
    started=0
   fi
 else
   echo "${filename} is still being written to, trying next file..."
 fi
done
}
 
# Export creation - note done in background to allow gzip loop to run
expdp '"/ as sysdba"' directory=DPUMP_DIR_ADHOC dumpfile=ram6_full%U.dmp logfile=ram6_full.log filesize=1024m full=y parallel=4 &
 
while [ `find ${EXP_DIR} -name \*.dmp|wc -l` -gt "0" ]; do
 gzip_func
 print "out of loop wait ${list_of_pids}"
 wait ${list_of_pids}
 list_of_pids=""
 sleep 5
done
Closed Thread

Закладки

Резьба Инструменты Искать в этом Thread
Искать в этом Thread:

Расширенный поиск
Режимы дисплея Оценить эту ветку
Оценить эту ветку:

Отправка Правила
Вы не может Начать новую нитей
Вы не может Почтовые ответы
Вы не может Почтовые вложения
Вы не может Редактировать Ваши сообщения

BB код быть На
Смайлики являемся На
[IMG] код На
HTML-код Вне
Trackbacks являемся На
Pingbacks являемся На
Refbacks являемся На




Часовой пояс GMT -4. Текущее время 03:08 AM.


Powered By: Справка, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Язык Переводы на питание от .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
В UNIX и Linux форумы Содержание Copyright © 1993-2009. Все права Reserved.Ad управления по RedTyger

Содержание соответствующие URL-адреса в vBSEO 3.2.0