The UNIX and Linux Forums  

Go Back   El UNIX y Linux Foros > Arriba Foros > Programación de scripts de shell y
.
google unix.com



Programación de scripts de shell y Plantear preguntas sobre KSH, CSH, SH, BASH, PERL, PHP, SED, AWK y otros scripts de shell y lenguajes de script de shell aquí.

Más UNIX y Linux Foro Temas usted puede encontrar útiles
Hilo Hilo para principiantes Foro Respuestas Último mensaje
descomprimir archivos gzip especialmente entre los archivos de datos normal thepurple Programación de scripts de shell y 4 11-30-2007 11:17 AM
gzip todos los archivos en un directorio er_ashu UNIX for Dummies Preguntas y Respuestas 2 11-06-2007 09:05 AM
Necesidad de grandes archivos gzip LordJezo UNIX for Dummies Preguntas y Respuestas 2 05-02-2005 05:18 PM
gzip, varios archivos smbodnar UNIX for Dummies Preguntas y Respuestas 2 11-11-2002 04:29 PM
Dos los archivos creados por cada uno? Atama UNIX for Dummies Preguntas y Respuestas 1 04-12-2002 05: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 vínculo Herramientas de hilo Buscar en este Hilo Tasa de Hilo Modos de visualización
  #1 (Enlace permanente)  
Old 10-13-2008
eisenhorn eisenhorn is offline
Usuario Registrado
  
 

Fecha: octubre 2008
Publicaciones: 3
Gzip archivos que se crean

Hola. Tengo una consulta de secuencias de comandos que estoy Sacado en la que espero que usted puede ayudar con.

Básicamente, he ksh un script que llama a un proceso para crear n número de archivos binarios. Estos archivos tienen un tamaño máximo de 1Gb. El proceso puede escribir n número de archivos a la vez (en paralelo), basado en el parámetro paralellisation en cuenta en la secuencia de comandos en el inicio. Normalmente se espera que para este proceso y, a continuación, para completar todos los archivos gzip individual (*. dmp gzip por ejemplo). Sin embargo, en algunos sistemas no tenemos suficiente espacio en disco que esperar hasta que todos los archivos de 1Gb se han producido.

Tengo algo de código previamente escrito gzip para los archivos en paralelo (véase más adelante), sin embargo, tiene la necesidad de gzip en paralelo, mientras que el primer proceso se ejecuta. Tengo que tener cuidado de no intentar ningún archivo gzip está escrito (hasta n paralelo desde el mando), por lo que algún tipo de bucle será necesario. Y quiero mantener la opción del paralelo gzip si es posible.


Código:
...
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

¿Puede alguien ayudarme a escribir código para esta utilizando herramientas estándar de Solaris 8/9/10 utilizando el korn shell. Perl comandos debería ser posible (vers 5.6.1 instalado).

Muchas gracias y Saludos,
Stephen.
  #2 (Enlace permanente)  
Old 10-13-2008
cfajohnson's Avatar
cfajohnson cfajohnson is offline Forum Advisor  
Shell programador, autor
  
 

Fecha: marzo 2007
Ubicación: Toronto, Canadá
Puestos: 2.380
Cita:
Publicado originalmente por eisenhorn View Post

Código:
...
gzip_func() {
started=0
threads=4
for filename in `ls -1 ${EXP_DIR}/*.dmp`

No sólo es -1 innecesaria, pero también lo es LS sí mismo. También, LS te romperá el guión si hay espacios en los nombres de los archivos.


Código:
for filename in ${EXP_DIR}/*.dmp

Cita:

Código:
do
 if [[ ${started} -lt ${threads} ]]; then
  let started=started+1

Utilizar la sintaxis:


Código:
 if [ ${started} -lt ${threads} ]; then
 started=$(( $started + 1 ))

Cita:

Código:
  echo "gzip ${filename}"
  ( $GZIPCMD ${filename} ) &

Cotizaciones de la variable, o su script romperá si hay espacios en el nombre del archivo (y no hay necesidad de que el paréntesis):


Código:
  $GZIPCMD "$filename" &

Cita:

Código:
  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

Lo malo:

[code]
para
Cita:

Código:
 gzip_func
 print "wait ${list_of_pids}"
 wait ${list_of_pids}
 list_of_pids=""
done

¿Puede alguien ayudarme a escribir código para esta utilizando herramientas estándar de Solaris 8/9/10 utilizando el korn shell. Perl comandos debería ser posible (vers 5.6.1 instalado).

Su código es mucho más complicado que debe ser.

No es claro el código de cómo saber si un archivo está siendo terminado por escrito a fin de que pueda comprimirlo.

¿Tiene algún control sobre el proceso que está escribiendo los archivos binarios?
  #3 (Enlace permanente)  
Old 10-14-2008
eisenhorn eisenhorn is offline
Usuario Registrado
  
 

Fecha: octubre 2008
Publicaciones: 3
Gracias cfajohnson. Voy a tratar de incorporar sus recomendaciones.

Sin embargo, para mi problema real, el oráculo de exportación de servicios públicos (el proceso que crea los archivos binarios) creará un archivo y luego rellenar con los datos hasta que llegue a 1Gb de tamaño, entonces se va a crear un nuevo archivo. Si usamos paralelización, creará n número de archivos (uno para cada proceso paralelo) y llenarlos. El final de los archivos binarios creados podría y probablemente sería la menos 1Gb.

Mi pensamiento fue llamar a la función gzip antes de la exportación de servicios públicos y, a continuación, tienen que esperar a gzip para los archivos, es decir, sólo los archivos gzip si hay más de la serie paralelo n. Por lo tanto, si paralelamente se estableció a 4, sólo el 5 º archivo gzip.

Pensando que a través, me resulta difícil de determinar que el archivo gzip programa gzip como podemos no sólo los archivos zip de 1Gb de tamaño, ya que podría terminar siendo escrito en el archivo, etc ¿Puedo usar algo como fusor para determinar si la herramienta de exportación ha terminado con el archivo? tal vez alguna forma de recorrer gzip que espera para el fusor para regresar no pid de un archivo de exportación y, a continuación, cremalleras que? He examinado a la exportación y puede ver que cuando la utilidad se terminó de escribir el archivo ya no se bloquea por lo que este podría ser factible.

Me gustaría conocer sus ideas.

Saludos cordiales.
  #4 (Enlace permanente)  
Old 10-14-2008
cfajohnson's Avatar
cfajohnson cfajohnson is offline Forum Advisor  
Shell programador, autor
  
 

Fecha: marzo 2007
Ubicación: Toronto, Canadá
Puestos: 2.380

Tan pronto como un nuevo archivo es creado, usted puede gzip el anterior.
  #5 (Enlace permanente)  
Old 10-15-2008
eisenhorn eisenhorn is offline
Usuario Registrado
  
 

Fecha: octubre 2008
Publicaciones: 3
Cita:
Publicado originalmente por cfajohnson View Post
Tan pronto como un nuevo archivo es creado, usted puede gzip el anterior.
No la más esclarecedora declaración pero entiendo lo que quieres decir.

He hecho un poco de juego y consideró que el programa de exportación va a crear un archivo de 4k inicialmente, y luego dejar de usar mientras se acumula una lista de objetos a la exportación. A continuación, devuelve un bloqueo sobre el archivo y el archivo se llena hasta el 1 GB de tamaño.

He modificado mi código para utilizar un fusor y del test para comprobar que el archivo más grande que se 4k y no se estaba utilizado por cualquier usuario. Me parece que si yo uso el paralelismo de la exportación el programa creará n número de archivos y, a continuación, llenar ellos, puede empezar con los archivos 1,2,3 y 4, sino 1,3, y 4 de repente llegar a 1Gb por lo que crea 5,6,7 para continuar el paralelo tareas. archivo 2 todavía no está completa (por la razón que sea).

Archivos de 1,3, y 4 están ahora no utilizada, pero la gzip_func no parece querer gzip los archivos hasta el archivo 2 es también no utilizados - que a menudo puede que no sea hasta el final de la exportación. ¿Puedes por favor lea el código de abajo y ver si puede detectar un error manifiesto? Quiero que el código para realizar el gzipping cuando los 2 se pasan las pruebas, si es posible sólo 1 archivo gzip o hasta n hilos. Alguna idea?


Código:
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

Marcadores

Herramientas de hilo Buscar en este Hilo
Buscar en este Hilo:

Búsqueda avanzada
Modos de visualización Vota a este hilo
Vota a este hilo:

Normas de envío
puede que no nuevo puesto de hilos
puede que no enviar respuestas
puede que no enviar archivos adjuntos
puede que no editar sus puestos

Código BB es Encendido
Emoticones son Encendido
[IMG] código Encendido
Código HTML es Apagado
Trackbacks son Encendido
Pingbacks son Encendido
Refbacks son Encendido




Todas las horas son GMT -4. La hora es 02:19 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traducciones de idiomas Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Estudios
El UNIX y Linux Foros Contenido Copyright © 1993-2009. Todos los derechos Reserved.Ad Gestión por RedTyger

Las direcciones URL de contenido vBSEO 3.2.0