Foros del Web » Administración de Sistemas » Unix / Linux »

Scrip.sh no retorna

Estas en el tema de Scrip.sh no retorna en el foro de Unix / Linux en Foros del Web. Buenas resulta ser que tengo un scritp que cuando lo ejecuto no vuelve a retornar, nose si me explico y pido perdon sino me estoy ...
  #1 (permalink)  
Antiguo 08/12/2013, 18:11
Avatar de luzzifer  
Fecha de Ingreso: julio-2009
Ubicación: Paraná - Argentina
Mensajes: 169
Antigüedad: 14 años, 9 meses
Puntos: 3
Pregunta Scrip.sh no retorna

Buenas resulta ser que tengo un scritp que cuando lo ejecuto no vuelve a retornar, nose si me explico y pido perdon sino me estoy expresando bien.

Este es el codigo LoginServer_loop.sh
Código:

Código BASH:
Ver original
  1. #!/bin/bash
  2.  
  3. err=1
  4. until [ $err == 0 ];
  5. do
  6.    [ -f log/java0.log.0 ] && mv log/java0.log.0 "log/`date +%Y-%m-%d_%H-%M-%S`_java.log"
  7.    [ -f log/stdout.log ] && mv log/stdout.log "log/`date +%Y-%m-%d_%H-%M-%S`_stdout.log"
  8.    java -Xms128m -Xmx128m -cp lib/*:l2jfrozen-core.jar com.l2jfrozen.loginserver.L2LoginServer > /var/l2lunaserver/loginserver/log/stdout.log 2>&1
  9.    err=$?
  10.    /etc/init.d/mysql restart
  11.    sleep 1;
  12. done
  13. exit $(( 1-success ))


Quizas esta mal escrito. pero resulta ser que cuando lo cargo de esta manera.
Código:
Código CONSOLA:
Ver original
  1. root@debian: ./LoginServer_loop.sh

vuelve y queda la pantalla asi.
Cita:
Código CONSOLA:
Ver original
  1. root@debian: ./LoginServer_loop.sh
  2. (renglon de abajo queda un guion _)


Y cuando intento escribir puedo escribir pero no puedo cargar mas nada, o sea todo lo que escribo es inutil.
me gustaria que cuando cargue el scrip me deje de nuevo en root@debian: _ para poder seguir trabajando.

Desde ya muchas gracias por la ayuda espero su ayuda. Y disculpen pero soy novato. He leido sobre bash y no he comprendido mucho en el codigo he agregado las lineas
Código:
Código BASH:
Ver original
  1. sleep 1;
  2. done
  3. exit $(( 1-success ))
y el sleep estaba en 10
  #2 (permalink)  
Antiguo 09/12/2013, 08:45
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Scrip.sh no retorna

En primer lugar, analiza tus scripts on bash -n o ksh -n, y te dirán los errores que contienen, si los hay. Luego, cuando los ejecutes, hazlo con "bash -x" o "ksh -x", y verás paso a paso lo que hace el script.
Otros servicios que te pueden ayudar son explainshell.com y shellcheck.com, pruébalos.

En principio no parece haber errores de sintaxis, solamente de estilo:
Código:
$ ksh -n test.sh
test.sh: warning: line 6: `...` obsolete, use $(...)
test.sh: warning: line 6: `...` obsolete, use $(...)
test.sh: warning: line 7: `...` obsolete, use $(...)
test.sh: warning: line 7: `...` obsolete, use $(...)
Eso nos recomienda usar $() en vez de las comillas invertidas.

Sigo viendo y encuentro la línea 4, "$err == 0". Ten en cuenta que allí estás comparando cadenas y no enteros, para comparar enteros usa
Código:
$err -eq 0
o la forma
Código:
(( err == 0 ))
Más allá de estos comentarios, tus errores son de estilo y de lógica.
Tu script intenta ejecutar un programa java y reiniciar mysql hasta que el programa java finalize con éxito. Esto está mal a varios niveles.

1. ¿Es necesario reiniciar mysql todas las veces? De hecho, ¿es necesario de veras independientemente de cómo funcione el programa java?
2. Si el programa falla, ¿no deberías ver por qué en vez de reiniciarlo todas las veces esperando que en alguna finalice bien?
3. ¿cuánto demora el programa java? porque el script continuará solamente cuando finalice, no inmediatamente después de ejecutarlo.
4. ¿dónde está definida la variable success de la última línea? si no está definida te dará un error, y además ¿por qué retornas con el valor contrario de success? (1 si success es 0, 0 si success es 1)

Mis recomendaciones:
1. corre tu script con el modificador "-x" para ver paso a paso lo que sucede.
2. Si el programa java no finaliza inmediatamente, es lógico que quede "colgado". Quizás esa sea la intención, para re-levantarlo si se cae por cualquier motivo, pero si ese es el objetivo del script no esperes retornar a la línea de comandos, te irá mejor llamándolo desde cron.


Saludos.
  #3 (permalink)  
Antiguo 12/12/2013, 15:03
 
Fecha de Ingreso: octubre-2010
Mensajes: 374
Antigüedad: 13 años, 6 meses
Puntos: 34
Respuesta: Scrip.sh no retorna

Se queda esperando hasta que err sea igual 0 y luego piensa proceder con lo demás, pero err se niega a ser 0, seguirá siendo 1 hasta el fin de los tiempos.

Yo tampoco entiendo para que reinicias siempre mysql, si tienes mucho tráfico y lo haces seguido algunos verán un error.

Supongo que el java lo reinicias para que regenere el log o algo, pero tampoco lo entiendo, el log en vez de moverlo puedes simplemente vaciarlo al menos claro que lo quieras tener guardado.

Aunque eso ya es cosa tuya y para tus necesidades, seguro que si haces un if y quitas el until y demás será más fácil y más pequeño.
__________________
Administrador de Servidores -> yo[arroba]skamasle[puntito]com
| Debian | Centos |
| Solución de Problemas | Seguridad | Instalaciones y Configuraciones | Soluciones Anti-DDOS
  #4 (permalink)  
Antiguo 12/12/2013, 15:42
Avatar de luzzifer  
Fecha de Ingreso: julio-2009
Ubicación: Paraná - Argentina
Mensajes: 169
Antigüedad: 14 años, 9 meses
Puntos: 3
Respuesta: Scrip.sh no retorna

Gracias a ambos, la verdad que lo solucione asi:
Código BASH:
Ver original
  1. ./LoginServer_loop.sh &
Cita:
Supongo que el java lo reinicias para que regenere el log o algo, pero tampoco lo entiendo, el log en vez de moverlo puedes simplemente vaciarlo al menos claro que lo quieras tener guardado.
Exacto genera log con fecha y hora, lo importante en este server java es controlar los errores y a la hora que fue cargado.

Etiquetas: bash
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:20.