Raspberry Pi inicia programas automáticamente al inicio

22

He construido una red de sensores inalámbricos que consta de dos Raspberry Pi (Runnnig Raspbian) con sensores y una estación base Raspberry Pi que recopila los datos.

Cada vez que quiero ejecutar el sistema, tengo que iniciar sesión en cada unidad de sensor y ejecutar dos programas Python en bucle, uno para recopilar datos del sensor y otro para transmitir a la estación base.

Estas unidades se dirigen a ubicaciones incómodas sin acceso a Internet, por lo que llevar un monitor, un teclado y un mouse conmigo para que funcionen no es exactamente fácil. ¿Hay alguna forma de configurarlos para iniciar sesión automáticamente, ejecutar el programa 1 y luego ejecutar el programa 2 automáticamente al inicio?

Kersakov
fuente

Respuestas:

15

Puede agregar esos 2 programas al archivo rc.local. Esto los ejecutará al inicio. Se puede encontrar más información en http://www.raspberrypi.org/documentation/linux/usage/rc-local.md .

Xer0FyT
fuente
3
Un punto no en ese documento que parece hacer tropezar a la gente: no lo uses sudoen rc.localsí mismo. Se ejecuta con privilegios de root en el arranque. Asegúrese de prestar atención a la parte sobre el uso a &menos que su programa simplemente haga algo rápidamente y luego se cierre.
Ricitos de oro
Si desea que sus programas se ejecuten después de red está activa, y /path/to/somescript.sh &que rc.local, como en el complemento de la escritura while ! ping -c 1 -W 1 8.8.8.8; do sleep 1; done;antes de iniciar sus programas.
Tor Klingberg el
+ goldilocks El problema es que no puede obtener acceso de escritura rc.localsin ejecutar sudo de antemano. ¿Que sugieres?
Rincewind
15

La respuesta de Xer0FyT es probablemente la forma más sencilla de iniciar automáticamente un programa en el PI. Pero los problemas ocurren una vez que el programa iniciado falla por cualquier motivo porque no se reiniciará, ya que no hay monitoreo del proceso. Yo personalmente recomendaría usar daemontools en su lugar. Es bastante simple de configurar (y está incluido en Raspbian). Básicamente, crea un directorio de servicios que contiene un runscript de shell que inicia su programa. Daemontools se asegurará de que su programa se inicie y reinicie en caso de que falle por algún motivo.

Configurar daemontools es bastante simple. Sólo

apt-get install daemontools daemontools-run

Luego cree su directorio de servicio que contenga un script ejecutable ejecutable:

# create the service directory
mkdir -p /service/my-service

# create the run script
cat > /service/my-service/run <<EOF
#!/bin/sh
echo "I'm an example service executed by daemontools"
sleep 1
# Replace those 2 lines with a real call to your program like this:
# exec /my/program.py --arguments
EOF

# make it executable
chmod 755 /service/my-service/run

Eche un vistazo /service/my-service/runy edítelo para que inicie su propio programa en lugar de ejecutarse echo. Una vez hecho esto, enlace simbólicamente ese directorio /etc/servicepara que daemontools lo (re) inicie automáticamente:

cd /etc/service
ln -s /service/my-service .

Después de unos 5 segundos, su programa debería ejecutarse. Puede iniciarlo / detenerlo usando

# stop it
$ svc -d /service/my-service

# start it
$ svc -u /service/my-service

También es posible iniciar sesión en (por ejemplo) syslog. Para que la salida de su programa no se pierda. Escribí una publicación de blog más completa sobre esto aquí: https://info-beamer.com/blog/running-info-beamer-in-production

dividuum
fuente
9
  1. En Raspian, haga clic en Menú, Preferencias, Editor del menú principal
  2. Haga clic en Preferencias y marque Aplicaciones predeterminadas para LXSession
  3. Haga clic en Aceptar y cierre el editor del menú principal
  4. Ahora haga clic en Menú y en Preferencias, haga clic en Aplicaciones predeterminadas para LXSession
  5. Se abre la configuración de LXSession
  6. Haga clic en Inicio automático
  7. En Manual, las aplicaciones de inicio automático pegan en la línea de comando de Java
  8. haga clic en agregar
  9. cierre la aplicación de configuración LXSession y reinicie su pi

    su aplicación java debería ejecutarse después de reiniciar

Palmeta
fuente
Creo que solo se requiere un poco más de detalle aquí
Darth Vader
¡Funcionó bien para mí!
jbyrnes
Gracias @Palmeta! Tenía un programa en inicio automático pero en realidad olvidé dónde lo había configurado. Miré por todas partes. Con la herramienta de configuración que describiste, finalmente pude localizarlo nuevamente y desactivarlo: D! 100 puntos
Pascal Lamers
2

Probablemente ya haya croninstalado algunas de las tareas de limpieza de PI.

Buscar man 5 crontabpara @reboot.


fuente
0

Es posible que desee investigar service. Puede crear un script de inicio que sea parte del inicio del sistema y ponerlo en un nivel de ejecución apropiado.

Ejecutar man service.

Aquí hay una guía para crear scripts de inicio: http://www.novell.com/coolsolutions/feature/15380.html

Bex
fuente
2
Lamentablemente, con la apresurada lemming hacia la systemdmayoría de las distribuciones de Linux, incluida Raspbian, esta respuesta deberá actualizarse si el OP actualiza su sistema para que se haga cargo de sysV init... 8- (
SlySven
0

Solo sigue este enlace .

Suponiendo que tiene test.txt en el escritorio, un ejemplo podría ser:

sudo nano /etc/xdg/lxsession/LXDE-pi/autostart
@leafpad /home/pi/Desktop/test.txt

¡y funciona!

Ehsan Ansari
fuente