Raspberry Pi avvia automaticamente i programmi all'avvio


22

Ho creato una rete di sensori wireless composta da due Raspberry Pi (runnnig Raspbian) con sensori attivi e una stazione base Raspberry Pi che raccoglie i dati.

Ogni volta che voglio avviare il sistema, devo accedere a ciascuna unità sensore ed eseguire due programmi Python in loop, uno per la raccolta dei dati del sensore e uno per la trasmissione alla stazione base.

Queste unità stanno andando in luoghi scomodi senza accesso a Internet, quindi portare con me un monitor, una tastiera e un mouse per farli funzionare non è esattamente facile. Esiste un modo per configurarli per accedere automaticamente, eseguire il programma 1 e quindi avviare automaticamente il programma 2 all'avvio?

Risposte:


15

È possibile aggiungere quei 2 programmi al file rc.local. Questo li eseguirà all'avvio. Ulteriori informazioni sono disponibili all'indirizzo http://www.raspberrypi.org/documentation/linux/usage/rc-local.md .


3
Un punto non in quel documento che sembra far inciampare le persone: non usare sudoin rc.localsé. Viene eseguito con i privilegi di root all'avvio. Assicurati di prestare attenzione alla parte sull'uso, a &meno che il tuo programma non faccia semplicemente qualcosa rapidamente, quindi esce.
Riccioli d'oro

Se si desidera che i programmi di correre dietro a rete, e /path/to/somescript.sh &per rc.local, e in aggiunta di script while ! ping -c 1 -W 1 8.8.8.8; do sleep 1; done;prima di avviare i programmi.
Tor Klingberg,

+ goldilocks Il problema è che non è possibile ottenere l'accesso in scrittura rc.localsenza eseguire sudo in anticipo. Che cosa suggerisci?
Scuotivento,

15

La risposta di Xer0FyT è probabilmente il modo più semplice per avviare automaticamente un programma sul PI. Ma i problemi si verificano una volta che il programma avviato si arresta in modo anomalo per qualsiasi motivo perché non verrà riavviato, poiché non esiste un monitoraggio del processo. Personalmente consiglierei di usare daemontools invece. È abbastanza semplice da installare (ed è incluso in Raspbian). Fondamentalmente si crea una directory di servizio che contiene uno runscript shell che avvia il programma. daemontools si assicurerà quindi che il programma venga avviato e riavviato in caso di arresto anomalo per qualsiasi motivo.

L'impostazione di daontoontools è piuttosto semplice. Appena

apt-get install daemontools daemontools-run

Quindi creare la directory del servizio contenente uno script di esecuzione eseguibile:

# 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

Dai un'occhiata /service/my-service/rune modificalo, quindi avvia il tuo programma invece di eseguirlo echo. Una volta fatto, /etc/servicecollega simbolicamente quella directory in modo che daemontools automaticamente (ri) la avvii:

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

Dopo circa 5 secondi il programma dovrebbe essere eseguito. Puoi avviarlo / interromperlo usando

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

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

È anche possibile accedere a (ad esempio) syslog. Quindi l'output del tuo programma non si perde. Ho scritto un post sul blog più completo su questo qui: https://info-beamer.com/blog/running-info-beamer-in-production


9
  1. In Raspian fai clic su Menu, Preferenze, Editor menu principale
  2. Fai clic su Preferenze e seleziona Applicazioni predefinite per LXSession
  3. Fai clic su OK e chiudi l'editor del menu principale
  4. Ora fai clic su Menu e in Preferenze fai clic su Applicazioni predefinite per LXSession
  5. Si apre la configurazione di LXSession
  6. Fai clic su Avvio automatico
  7. In Applicazioni manuali con avvio automatico incollare nella riga di comando java
  8. fai clic su aggiungi
  9. chiudi l'applicazione di configurazione LXSession e riavvia il tuo pi

    l'app java dovrebbe essere eseguita dopo il riavvio


Penso che siano necessari solo un po 'più di dettagli qui
Darth Vader

Ha funzionato bene per me!
jbyrnes,

Grazie @Palmeta! Avevo un programma in avvio automatico ma in realtà ho dimenticato dove l'avevo impostato. Ho cercato dappertutto. Con lo strumento di configurazione che hai descritto, finalmente ho potuto individuarlo di nuovo e disattivarlo: D! 100 punti
Pascal Lamers,

2

Probabilmente hai già croninstallato per alcune delle attività di pulizia del PI.

Cerca man 5 crontabper @reboot.


0

Potresti voler fare delle ricerche service. È possibile creare uno script init che fa parte dell'init del sistema e posizionarlo a un runlevel appropriato.

Corri man service.

Ecco una guida per la creazione di script init: http://www.novell.com/coolsolutions/feature/15380.html


2
Purtroppo, con la corsa simile a un lemming verso la systemdmaggior parte delle distribuzioni Linux, incluso Raspbian, questa risposta dovrà essere aggiornata se l'OP aggiorna il loro sistema in modo che prenda il posto di sysV init... 8- (
SlySven

0

Segui questo link .

Supponendo di avere test.txt sul desktop, un esempio potrebbe essere:

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

e funziona!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.