Duda: Bash Script - Dos tareas en un paso, ya casi esta...

Temas sobre programación ( php, c, sql, html, perl, python, ruby, java, bash, etc ) y recursos ( herramientas, frameworks, hosting, cms, etc )

Moderadores: maiku, akodo

Responder
Avatar de Usuario
Nagual
Forista Distinguido
Forista Distinguido
Mensajes: 1004
Registrado: Vie Jul 01, 2005 7:00 am
Ubicación: Oaxaca, Mexico

Duda: Bash Script - Dos tareas en un paso, ya casi esta...

Mensaje por Nagual »

Buen dia a todos y un saludo

Estoy tratando de dejara punto un script para cortar los logs de Apache, esto con el fin de liberar algo de memoria RAM en un servidor.
Ya casi esta, puedo hacer la copia y el corte de uno, comentando ese bloque se puede hacer la copia y el corte del segundo archivo de log, lo que aun no me sale es que haga el copiado y el corte de los dos archivos en un solo paso, es decir, que terminando uno siga con el otro, no quiero tener un script por log si puedo hacerlo en un script...

y estoy casi seguro que es un detalle en los IFs, pero bueno, antes de que me salgan canas verdes solicito ayuda :oops:

aqui esta el script

Código: Seleccionar todo

#!/bin/sh

#Directorio donde se encuentran los logs
directorio="/var/log/apache2"

#Fecha actual
fecha=`date +%d%b%Y`

#Nombre del archivo correspondiente al log de acceso
accesslog="access.log"

#Nombre del archivo correspondiente al log de error
errorlog="error.log"

### Corte de access.log ###
echo ${directorio}/${accesslog}

if [ -a $directorio/$accesslog ]
   then
      cd $directorio
      cp $accesslog $accesslog-$fecha
      if [ -a $accesslog-$fecha ]
         then echo "copia de ${accesslog} creada"
              echo "-- Corte en ${fecha} ---" > $accesslog
         else
              echo "Error al crear copia de ${accesslog}"
      fi
      exit 1
else
   echo "No exite ${directorio}/${accesslog}"
   exit 0
fi

### Corte de error.log ###

if [ -a $directorio/$errorlog ]
   then
      cd $directorio
      cp $errorlog $errorlog-$fecha
      if [ -a $errorlog-$fecha ]
         then echo "copia de ${errorlog} creada"
              echo "-- Corte en ${fecha} ---" > $errorlog
         else
              echo "Error al crear copia de ${errorlog}"
      fi
      exit 1
else
   echo "No exite ${directorio}/${errorlog}"
   exit 0
fi
#echo $fecha
y pues es todo lo que llevo.

Agradeceria la orientacion que me puedan dar.

Gracias por adelantado

Sales pues :)
Blaise Pascal: "Vale más saber alguna cosa de todo, que saberlo todo de una sola cosa."
Twitter: @nagual_oax

Avatar de Usuario
akodo
Moderador
Moderador
Mensajes: 1457
Registrado: Mié Nov 28, 2007 8:00 am
Ubicación: En la X del explorer (pulse para llamar)

Re: Duda: Bash Script - Dos tareas en un paso, ya casi esta...

Mensaje por akodo »

Te estoy viendo muchos exits, y algunos no deberías tenerlos.
Por convención, un "exit 0" indica que el programa se ha ejecutado correctamente, y toma otro valor en caso contrario.
Quedaría algo así:

Código: Seleccionar todo

if ..... then
   <copiar log>
   if existe_copia_log then
       echo "corte......"
   else
       error
       exit 1
   fi
else
   error
   exit 2
fi

El problema está en que tu exit más interno (tu "exit 1") se ejecuta siempre, y si no se ejecuta entonces se ejecuta el "exit 0" externo, con lo que el código no continúa más allá.
Descargue el gestor de mp3 "Music Manager" -> ([url=http://ctrlalt.iespana.es]mmlf[/url])
Última versión del gestor "Music Manager" -> ([url=http://sourceforge.net/projects/jmusicmanager/]jmmm[/url])

Responder
  • Temas similares
    Respuestas
    Vistas
    Último mensaje