web-dev-qa-db-fra.com

Arrêtez Raspberry Pi d'exécuter le programme au démarrage

J'essayais de comprendre comment exécuter un programme au démarrage, mais après avoir réalisé que ce programme était une boucle infinie, je n'ai aucun moyen de sortir ou de revenir au terminal. Dès que je donne le pouvoir Pi, cela va droit au programme sur un fond noir. Je ne me souviens pas exactement de ce que j'ai fait pour le faire tourner au démarrage, je pense avoir simplement ajouté du code juste au-dessus de quelque chose qui dit "exit 0" et au-dessous de quelque chose qui dit "esac". Je ne me souviens pas de la commande qui m'a même amené là. (Je suis nouveau dans le Pi et le Python et je viens de jouer ... sans conviction.)

Si quelqu'un pouvait m'aider à supprimer ce programme ou à ce que je puisse le modifier afin que je puisse réparer la boucle infinie, ce serait génial. Je préférerais ne pas avoir à écraser complètement la carte SD avec un Raspbian frais. Mais comme je l'ai dit, je ne peux rien faire au démarrage, et Ctrl + C ne fait rien, ni Ctrl + Alt + Suppr.

EDIT: Lorsque je mets la carte SD sur mon ordinateur, une liste de 11 fichiers s’affiche: Code de démarrage Cmdline Config Correctif Fixup_cd question kernel kernel_cutdown kernel_emergency start.elf start_cd.elf

Aucune de ces choses ne signifie rien pour moi ...

6
user2506445

Update: On dirait que j'ai échoué à obtenir que vous vouliez interrompre le processus de démarrage en cours et arrêter le script.

L'idée la plus simple serait de tourner le pi, de débrancher la carte SD et de le brancher sur votre bureau, de (re) déplacer le script et de redémarrer.


Les processus générés au démarrage sont stockés dans des scripts dans /etc/init.d/.... Ces scripts sont appelés par le processus init, le premier processus sur une machine Linux (PID: 1)

Mais init ne démarre pas tous les scripts dans /etc/init.d. Cela dépend du niveau d'exécution. Sur un système Debian, il y a 7 niveaux d'exécution.

Pour chaque niveau d'exécution, il existe un dossier appelé:

/etc/rc0.d
...
/rc6.d

dans lesquels sont stockés les liens vers les scripts de /etc/init.d.

Pour supprimer l'exécution d'un script à chaque démarrage, supprimez tous les liens de ces dossiers. Généralement, sur les systèmes debian, cela se fait à l'aide de l'outil update-rc.d:

update-rc.d NAME_OF_INIT_SCRIPT remove

Vous devriez également consulter le fichier /etc/rc.local

12
hek2mgl

Alt + PrintScn + k pour tuer le processus bloqué de rc.local

6
user1070356

Vous pouvez utiliser le fichier cmdline.txt. Ajoutez d’abord ou modifiez le fichier cmdline.txt sur votre carte SD. Ajoutez "init =/bin/sh", puis redémarrez votre Pi et vous pourrez voir une invite de ligne de commande. Tapez "Sudo nano /etc/rc.local" pour éditer le fichier et commenter ou supprimer le fichier. ligne contenant l'erreur. Après ce redémarrage.

3
user2536152

J'ai eu exactement le même problème, je ne pouvais pas quitter le processus en utilisant CTRL + C. J'ai édité le cmdline.txt comme indiqué ci-dessus, mais le pi n'a pas chargé les pilotes USB nécessaires pour mon clavier.

Donc, finalement, je me suis connecté via pi sur SSH et modifié mon fichier rc.local de cette façon.

1
Wout Standaert

J'ai eu le même problème que expliqué au début de ce post. Mon application Python a été prise dans une boucle sans fin.

J'ai essayé le Ctrl+Alt+F2 Commande comme recommandé dans de nombreux articles trouvés sur Internet sans qu'aucune fenêtre de terminal ne soit ouverte. Apparemment, après de nombreux autres essais et redémarrages, j'ai pu entrevoir une fenêtre de terminal à chaque redémarrage de la boucle de mon application. Il était impossible de rien attraper jusqu'à ce que je commence à enregistrer l'écran en utilisant la vidéo au ralenti de mon téléphone portable et, effectivement, une fenêtre de terminal avec l'invite de Linux était active et capable d'accepter les entrées au clavier.

Je n’ai fait que modifier (presque à l’aveugle) le fichier du coupable avec

Sudo nano filename command 

et en entrant quelques caractères afin de corrompre réellement ce fichier, en le sauvegardant et le fermant, un redémarrage du Pi À la fin du démarrage, le fichier a généré une erreur mais le système est resté prêt à fonctionner.

J'ai alors pu corriger le bogue de manière normale. Il espère que cela pourra être utile à d’autres. Dans mon cas, cela m'a évité de graver un nouveau Raspbian et de perdre tout mon travail précédent.

0
Rambar48

Je me suis coincé dans exactement le même problème. Heureusement, le SSH était activé. Apparemment, il est désactivé par défaut sur Raspbian Jessie, ce qui risque de ne pas fonctionner pour tous.

La sortie 0 est la ligne dans /etc/rc.local à laquelle vous auriez ajouté dans le script qui s'exécute maintenant en mode continu. Si vous pouvez ssh dans le Pi en utilisant PuTTY et l'adresse IP du Pi, alors

Sudo nano /etc/rc.local

Faites défiler vers le bas du fichier et supprimez le programme en cause, puis Sudo reboot

Pour éviter ce problème, il suffit d’ajouter un & (esperluette) à la fin de la ligne pour créer le processus et l’exécuter séparément.

python /home/pi/myscript.py &

comme spécifié dans https://www.raspberrypi.org/documentation/linux/usage/rc-local.md

L'esperluette permet à la commande de s'exécuter dans un processus séparé et de continuer à démarrer avec le processus en cours d'exécution.

0
SudeepJD

Dans mon cas, la combinaison "Alt" + "F4" a fonctionné, il arrête la session en cours et ouvre l'écran de connexion

0
Andrey Mazur