Java - Hacer un programa que no pare de ejecutarse

   
Vista:

Hacer un programa que no pare de ejecutarse

Publicado por Aitor Sanchez Salgado (7 intervenciones) el 07/11/2007 14:40:42
Hola,
parece sencillo el titulo eh? jejejeje es broma, tengo una dificultad (para mi), y es que estoy haciendo un programa en java que debe mirar SIEMPRE en un directorio, del unix donde esta corriendo, que existan unos archivos .TXT, si así és debe hacer unas operaciones, y despues continua mirando en ese directorio si hay mas .TXT, así siempre. La verdad es que ya mira en el directorio haciendo:

File f = new File("toSend");
String[] listaArchivos = f.List();

Asi tengo todos los archivos en el array de strings (bueno, el nombre de los archivos), bien, si ademas en el UNIX que tengo llamo a mi programa asi:

nohup ./nombredemiprograma &

No para de ejecutarse, y en realidad esta haciendo su trabajo, pero cuando miro el consumo... me asusto, el 90% de la CPU, y es un pedazo de maquina, por eso necesito saver si hay alguna manera que mi programa solo se arranque cuando reciba un archivo el directorio en cuestion, o al menos que baje de consumo, ya que lo he optimizado al maximo.

Gracias!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Hacer un programa que no pare de ejecutarse

Publicado por chuidiang (949 intervenciones) el 07/11/2007 22:09:05
Hola:

Si estás haciendo una "espera activa", es normal que ocurra eso. Una espera activa es un bucle en el que no duermes nunca el proceso, del estilo

while (true)
{
if (hayFichero) operaciones();
}

Lo que debes hacer es dormir dentro del bucle durante un ratito. Cuanto más tiempo duermas, mejor, pero siempre teniendo en cuenta que ese tiempo de dormir es tiempo que tardarás en darte cuenta si están los ficheros. Busca un tiempo que consideres adecuado.

while (true)
{
if (hayFichero) operaciones();
else try {
Thread.sleep (tiempoEnMilisegundos)
} catch (Excepcion e)
{
e.printStackTrace();
}
}

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Hacer un programa que no pare de ejecutarse

Publicado por Aitor Sanchez Salgado (7 intervenciones) el 09/11/2007 10:49:48
Muchas gracias!
Ahora lo que estoy haciendo es lo siguiente:

He creado un sh que siempre esta arrancado:

clear
echo PROGRAMA ARRANCADO A LAS `date` >> logs/logSendFile.log
echo --------------------------------------------------------------------------------- >> logs/logSendFile.log
echo ---------------------------------------------------------------------------------
echo PROGRAMA DE PROCESAMIENTO DE ARCHIVOS DE eGEMA
echo ARRANCADO A LAS `date`
echo ---------------------------------------------------------------------------------
while :
do
if [ -f toSend/*.TXT ]
then
echo PROCESANDO ARCHIVOS ENCONTRADOS `date` >> logs/logSendFile.log
/usr/java14/bin/java -jar -classpath :/lib/* FileProcessDaemon.jar >logs/ExecutionLog.log
fi
done

En un principio lo usaba con el nohup:

nohup ./FileProcessing.sh &

Pero el consumo era igualmente excesivo, al final opté por hacer mas o menos lo que tu decías, como ves más arriba, pero sin el sleep, aunque si veo que al final el consumo vuelve a ser excesivo, creo el command sleep, y a ver que pasa.

Muchas gracias de nuevo.

PD: Ahora me voy a escribir otra nota al foro de UNIX pq esta si que es gorda, a ver si lo saves tu de rebote:
como cazo los errores que pueda dar un .sh que hace un ftp, del estilo:

#etc/bin/!
# programa: envioftp.sh
ftp -n 10.128.10.65 <<END_SCRIPT
quote USER usuario
quote PASS password
put archivo
quit
END_SCRIPT
return 0

./envioftp.sh 2> ErrorLog.log
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar