Raspberry Pi démarre automatiquement les programmes au démarrage

22

J'ai construit un réseau de capteurs sans fil composé de deux Raspberry Pi (runnnig Raspbian) avec des capteurs et une station de base Raspberry Pi qui collecte les données.

Chaque fois que je veux exécuter le système, je dois me connecter à chaque unité de capteur et exécuter deux programmes Python en boucle, un pour la collecte des données du capteur et un pour la transmission à la station de base.

Ces unités vont dans des endroits difficiles d'accès sans accès à Internet, donc prendre un moniteur, un clavier et une souris avec moi pour les faire fonctionner n'est pas exactement facile. Existe-t-il un moyen de les configurer pour se connecter automatiquement, exécuter le programme 1, puis exécuter le programme 2 automatiquement au démarrage?

Kersakov
la source

Réponses:

15

Vous pouvez ajouter ces 2 programmes au fichier rc.local. Cela les exécutera au démarrage. Plus d'informations peuvent être trouvées à http://www.raspberrypi.org/documentation/linux/usage/rc-local.md .

Xer0FyT
la source
3
Un point pas dans ce doc qui semble trébucher: ne pas utiliser sudoen rc.localsoi. Il est exécuté avec des privilèges root au démarrage. Assurez-vous de faire attention à la partie concernant l'utilisation, à &moins que votre programme ne fasse quelque chose rapidement puis se ferme.
goldilocks
Si vous souhaitez que vos programmes s'exécutent une fois que le réseau est en place, et /path/to/somescript.sh &dans rc.localet dans le script, ajoutez while ! ping -c 1 -W 1 8.8.8.8; do sleep 1; done;avant de démarrer vos programmes.
Tor Klingberg
+ goldilocks Le problème est que vous ne pouvez pas accéder en écriture à rc.localsans exécuter sudo au préalable. Que suggérez-vous?
Rincevent
15

La réponse de Xer0FyT est probablement le moyen le plus simple de démarrer automatiquement un programme sur le PI. Mais des problèmes surviennent une fois que le programme démarré se bloque pour une raison quelconque, car il ne sera pas redémarré, car il n'y a pas de surveillance des processus. Personnellement, je recommanderais plutôt d' utiliser daemontools . C'est assez simple à configurer (et est inclus dans Raspbian). Fondamentalement, vous créez un répertoire de service qui contient un runscript shell qui démarre votre programme. daemontools s'assurera alors que votre programme est démarré et redémarré en cas de plantage pour une raison quelconque.

La configuration de daemontools est assez simple. Juste

apt-get install daemontools daemontools-run

Créez ensuite votre répertoire de service contenant un script d'exécution exécutable:

# 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

Jetez-y un œil /service/my-service/runet modifiez-le pour qu'il démarre votre propre programme au lieu de s'exécuter echo. Une fois cela fait, créez un lien symbolique vers ce répertoire /etc/serviceafin que daemontools le (re) démarre automatiquement:

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

Après environ 5 secondes, votre programme devrait s'exécuter. Vous pouvez le démarrer / l'arrêter en utilisant

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

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

Il est également possible de se connecter (par exemple) à syslog. Ainsi, la sortie de votre programme ne se perd pas. J'ai écrit un article de blog plus complet à ce sujet ici: https://info-beamer.com/blog/running-info-beamer-in-production

dividuum
la source
9
  1. Dans Raspian, cliquez sur Menu, Préférences, Éditeur du menu principal
  2. Cliquez sur Préférences et cochez Applications par défaut pour LXSession
  3. Cliquez sur OK et fermez l'éditeur du menu principal
  4. Maintenant, cliquez sur Menu et sous Préférences, cliquez sur Applications par défaut pour LXSession
  5. La configuration de LXSession s'ouvre
  6. Cliquez sur Démarrage automatique
  7. Sous Applications automatiques démarrées automatiquement, collez dans votre ligne de commande java
  8. cliquez sur ajouter
  9. fermez l'application de configuration LXSession et redémarrez votre pi

    votre application java devrait s'exécuter après le redémarrage

Palmeta
la source
Je pense qu'un peu plus de détails sont nécessaires ici
Dark Vador
Ça a bien marché pour moi!
jbyrnes
Merci @Palmeta! J'avais un programme en démarrage automatique, mais j'ai oublié où je l'avais mis. J'ai regardé partout. Avec l'outil de configuration que vous avez décrit, j'ai enfin pu le retrouver et le désactiver: D! 100 points
Pascal Lamers
2

Vous avez probablement déjà croninstallé pour certaines des tâches de ménage du PI.

Recherche man 5 crontabpour @reboot.


la source
0

Vous voudrez peut-être faire des recherches service. Vous pouvez créer un script d'initialisation qui fait partie de l'initialisation du système et le placer à un niveau d'exécution approprié.

Courez man service.

Voici un guide pour créer des scripts d'initialisation: http://www.novell.com/coolsolutions/feature/15380.html

Bex
la source
2
Malheureusement, avec la ruée vers le lemming vers la systemdplupart des distributions Linux, y compris Raspbian, cette réponse devra être mise à jour si l'OP met à jour leur système afin qu'il prenne le relais de sysV init... 8- (
SlySven
0

Suivez simplement ce lien .

En supposant que vous ayez test.txt sur le bureau, un exemple pourrait être:

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

et il fonctionne!

Ehsan Ansari
la source