En raison de spams récurrents, les messages des nouveaux inscrits sont modérés a priori. Ne vous inquiétez pas si vous ne voyez pas apparaitre votre message immédiatement sur le forum. (November 04, 2021) x

Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5

[Résolu] Lancement et arrêt
#1

Bonjour à tou(te)s,

Pi2/Buster
Mon Pi2 contient une appli spécifique en mode graphique, et je ne m'en sers que 2 fois par
semaine.
Du coup, il est alimenté directement par un port usb de mon PC quand j'en ai besoin.

Mon ordi principal est un LM20.1
Donc depuis mon LM, j'arrive à lancer mon app graphique depuis un start.sh
sshpass -p mypass ssh -X -C [email protected] /home/pi/monap/lelogiciel
Jusque là tout est OK.

MAIS...
j'ai lu (et c'est plus sage), qu'il faut toujours arrêter pi (proprement), comme s'il fallait le préciser Wink
Or, quand je quitte mon [lelogiciel], ben, il n'est pas prévue pour éteindre le Pi
Et donc, si j'éteins mon LM, ça éteint le Pi à l'arrache par coupure de l'usb...
Bien sûr, pour le moment je me log au pi en ssh et je lui fais un shutdown

Moyen faire plus 'pratique' ?
1°) J'allume mon PI
2°) Je bosse sur mon [lelogiciel]
3°) Quand je quitte  [lelogiciel]  ça  shutdown le pi

Merci d'avance.
Répondre
#2

Je ne pense pas que ça puisse se faire très simplement, c'est énormément dépendant de ton logiciel.

Une piste pourrait être que ton logiciel soit lancé par un script qui récupère le pid et génère un fichier pid.lelogiciel, et qu'un autre script vérifie régulièrement (par cron, toutes les minutes) la présence de ce fichier et que le process correspondant à ce pid tourne effectivement.

Si le pid.lelogiciel existe et qu'il y a bien un process correspondant (ça se teste avec kill -CHLD pid), on ne fait rien.
Si le pid.lelogiciel existe et qu'il n'y a pas de process, on supprime pid.lelogiciel et on shutdown. Cela nécessite que ton utilisateur puisse faire un shutdown, ou un sudo shutdown sans mot de passe.

Principe du script appelé par le cron:
Bash
#! /bin/sh
pidfile=/home/pi/monap/pid.lelogiciel
 
if test -r $pidfile
then
   lepid=`cat $pidfile`
   if `kill -CHLD $pidfile >/dev/null 2>&1`
   then
      exit 0
   fi
   rm -f  $pidfile
   shutdown -h now
fi
exit 0



Le script de lancement du logiciel serait:
Bash
#! /bin/sh
pidfile=/home/pi/monap/pid.lelogiciel
 
if test -r $pidfile
then
   # suppression du fichier (mauvais arrêt précédent ?)
   rm -f $pidfile
fi
/home/pi/monap/lelogiciel
& echo $! > $pidfile



C'est pas testé, c'est juste une piste Smile
Répondre
#3

Wouahouuu, en tout cas, c'est en effet une excellent idée ça, je
vais 'tester' ça....
Merci...
Répondre
#4

Une autre solution serait simplement de mettre à la fin de ton script quelque chose comme :
sshpass -p mypass ssh -X -C [email protected] sudo shutdown -h now

En ayant pris soin de configurer sudo pour qu'il ne demande pas de mot de passe.
A priori la ligne de lancement de ton programme est bloquante, donc il n'exécutera la suivante qu'une fois le programme fermé.

Un autre piste pourrait être d'exécuter un script à l'arrêt de ton ordinateur pour s'assurer que le pi est bien éteint (par exemple en surveillant qu'il ne répond pas à un ping)

Et s'il est allumé de lui envoyer la commande d'extinction via ssh.

Pour exécuter un script à l'arrêt de l'ordinateur, il semble y avoir des pistes sur le lien suivant :
https://superuser.com/questions/1016827/...th-systemd
Répondre
#5

Merci pour vos aides...
c'est pas gagné, mais il semble que ce soit le  
shutdown qui m'embête.

Pour que le shutdown puisse se faire sans mot de passe j'ai utilisé visudo 
je lui ai mis:
Cmnd_Alias    SHUTDOWN = /sbin/shutdown
pi            ALL = NOPASSWD: SHUTDOWN

Du coup ma ligne est 
sshpass -p mypass ssh -X -C [email protected] /home/pi/monap/lelogiciel && ssh [email protected] "shutdown -h"
ou
sshpass -p mypass ssh -X -C [email protected] /home/pi/monap/lelogiciel && ssh [email protected] shutdown -h

Ca semble pas trop mal, car quand je ferme le   [lelogiciel]   la commande continue.... mais...
bash: shutdown : commande introuvable
dans toutes les syntaxes et MEME sans lancer    [lelogiciel]   uniquement en faisant 
ssh [email protected] shutdown -h                ça me répond
bash: shutdown : commande introuvable

J'ai mis un script sur le bureau du pi  avec la commande     shutdown -h     script en chmod +x  
du coup:
ssh [email protected] /home/pi/Desktop/arret.sh            (le bureau s'appelle bien  Desktop)
et j'ai encore ce 
bash: shutdown : commande introuvable

je viens de tenter:
ssh [email protected] /sbin/shutdown -h
voici la réponse si ça peut aider....

Code :
Failed to set wall message, ignoring: Interactive authentication required.
Failed to call ScheduleShutdown in logind, proceeding with immediate shutdown: Interactive authentication required.
Failed to set wall message, ignoring: Interactive authentication required.
Failed to power off system via logind: Interactive authentication required.
Failed to open initctl fifo: Permission non accordée
Failed to talk to init daemon.


Un autre tuyaux svp ?
Merci.

Je l'ai "eu" Wink Wink Wink

Ouf, bon:
grâce à sshpass (et peut-être le visudo, mais je ne vais pas y retoucher)
sshpass -p mypass ssh -X -C [email protected] /home/pi/monap/lelogiciel && sshpass -p mypass ssh [email protected] sudo shutdown -h

Et voilà, le shutdown s'execute au moment au je ferme "lelogiciel" (enfin 1 minute plus tard) et ne me demande pas de passwd...

Tout est bouclé, merci pour votre aide et vos pistes.
Répondre
#6

Si ça marche, tant mieux.
En ce qui concerne la commande non trouvée, c'est un phénomène fréquent avec cron: l'environnement n'est pas chargé, donc les paths sont absent. Il faut donc mettre les chemins complets vers toutes les commandes qui sont utilisées.
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)