[Jderobot-dev] [UAV] Problema al iniciar tarea en Raspberry

Oscar Garcia oscar.robotica en linaresdigital.com
Sab Nov 3 20:27:49 CET 2012


El 03/11/12 17:17, Livio Calvo escribió:
> Tengo una tarea que funciona perfectamente en Raspberry si la arranco
> manualmente despues de hacer login, o bien la invoco desde un script en
> /etc/init.d . ... Si pongo un &
> al final del comando "java -jar /home/pi/AAB.jar" el resto de servicios
> siguen arrancando como era de esperar, sin embargo la aplicación tiene
> un mal funcionamiento, es incapaz de enviar instrucciones por el puerto
> serie o bien no lo hace correctamente, porque el Arduino no envía las
> respuestas, sin embargo el led parpadea cuando recibe una instrucción.
> Por lo demas funciona bien.


Sinceramente, no entiendo el problema por el que el arduino no responde 
a la raspberry cuando envía comandos, a no ser que otro programa después 
del arranque del tuyo cambie la configuración de comunicaciones del 
puerto serie y el LED parpadea por llegar "basura" y no comandos reales.


> Se me ocurren dos maneras de arreglarlo:
> 1 - Retrasar el lanzamiento del java -jar ... 20-30 segundos hasta que
> los servicios hayan arrancado, pero por ahora no se como hacerlo sin
> parar el lanzamiento de servicios


¿Cómo lo vas a retrasar? Quizá sea más lógico ralentizar el main de Java 
para que la configuración del puerto serie se realice un poco más tarde, 
o bien lanzar tu script en rc.local.

Por cierto, ¿qué nivel le diste a tu script de init.d dentro de los 
rcx.d? S99 es lo normal para scripts que necesitan que todo lo demás 
esté funcionando antes de arrancar.


> 2 - Lanzar correctamente en un hilo separado mi tarea, cosa que por
> ahora puedo hacer pero no funciona bien
>
> Alguna sugerencia?


Es lo correcto. ¿Has probado con nohup?

Puedes usar /etc/rc.local y poner:

nohup java -jar /home/pi/AAB.jar &

Pero de esa manera no podrás obtener el PID. Lo ideal es que cierres la 
salida y error estándar desde dentro del java de esta manera:

static public void cerrar_todo() {
    System.out.close();
    System.err.close();
}

Y así puedes escribir un script de arranque que puedas meter en 
/etc/init.d/ como (recuerda que sea S99xxx el enlace simbólico en los 
rcx.d):

#!/bin/bash
java -jar /home/pi/AAB.jar &
echo "$!" > /home/pi/AAB.pid

También puedes redirigir todo a /dev/null así:
java -jar /home/pi/AAB.jar > /dev/null 2>&1 &

Pero es menos elegante. Prueba varias de las opciones y nos comentas qué 
tal salen.

Un saludo.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://gsyc.escet.urjc.es/pipermail/jde-developers/attachments/20121103/dfe7b4a1/attachment.htm 


More information about the Jde-developers mailing list