LuuB
Posts: 3
Joined: Thu Jun 07, 2018 8:51 am

Lancement d’un programme au démarrage - SystemD

Thu Jul 12, 2018 12:51 pm

Bonjour à tous,

J’essaye de lancer un script python au démarrage de mon rpi3 b+, sans avoir à passer par l’interface. Ce script est un simple programme qui lance des musiques avec pygame, quand on appuie sur des boutons.

On m’a conseillé de passer par systemD, mais je me trouve confronter à un problème que je ne sais pas résoudre, malgré mes nombreuses recherches sur internet…

Voici la façon dont j’ai procédé:

1. Créer un service “programme_musical_start.service” :

Code: Select all

[Unit]
Description = application musique python
After = multi-user.target
[Service]
ExecStart=/usr/bin/python /home/pi/Documents/programme_final_boutons.py
WorkingDirectory=/home/pi/Documents/
User=root
Type=simple
[Install]
WantedBy = multi-user.target
2. Copier ce fichier dans /etc/systemd/system

Code: Select all

sudo cp programme_musical_start.service /etc/systemd/system/programme_musical_start.service
sudo chown root:root /etc/systemd/system/programme_musical_start.service
sudo chmod 666 /etc/systemd/system/programme_musical_start.service
3. Activer le service

Code: Select all

sudo systemctl enable programme_musical_start.service
Ce code me renvoie:

Code: Select all

Created synlink /etc/systemd/system/multi-user.target.wants/programme_musical_start.service
4. Je reboot le raspberry
Je constate que mon programme ne s’est pas lancé.
Je vérifie l’état du service en tapant : systemctl status programme_musical_start.service

et la ça me renvoie :

Code: Select all

programme_musical_start.service - application musique python
Loaded: loaded (/etc/systemd/system/programme_musical_start.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Thu 2018-07-12 09:27:04 UTC; 4min 53s ago
Process: 607 ExecStart=/usr/bin/python /home/pi/Documents/programme_final_boutons.py (code=killed, signal=HUP)
MainPID: 607 (code=killed, signal=HUP)

juil. 12 09:27:01 raspberrypi systemd[1]: Starting application musique python.
~
~
~
…
Je ne comprends pas pourquoi j’ai cette erreur…
Peut-être ai-je mal compris comment procéder… J’espère avoir été claire dans mes explications et que quelqu’un saura m’aiguiller.

Merci d’avance pour votre aide !

Bonne journée

jelopo
Posts: 1415
Joined: Wed Oct 17, 2012 7:53 pm

Re: Lancement d’un programme au démarrage - SystemD

Thu Jul 12, 2018 1:29 pm

Bonjour,

Je ne connais pas systemd mais, la précision de la présentation du problème avec les détails de la procédure ainsi que le code erreur généré, mérite d'avoir une réponse. Bravo pour ce post, ça change tellement de "j'ai suivi un tuto, ça marche pas." !

Au vu des logs, le service semble bien lancé,mais il a été killé.

Dans un premier temps comment se comporte le programme si il est lancé
- dans une console avec le user pi ?

Code: Select all

[email protected]:~$ /usr/bin/python /home/pi/Documents/programme_final_boutons.py
- dans une console avec le user root ?

Code: Select all

[email protected]:~# /usr/bin/python /home/pi/Documents/programme_final_boutons.py
- par le service après le boot ?

Code: Select all

[email protected]:~# systemctl start programme_musical_start.service 
A+

fredoll
Posts: 220
Joined: Thu Jan 10, 2013 10:30 am

Re: Lancement d’un programme au démarrage - SystemD

Thu Jul 12, 2018 3:15 pm

Effectivement, bravo pour le post détaillé.
et Bravo pour la réponse :-)
Question: pourquoi exécuter avec l'utilisateur root ?
pi semble plus adapté pour écouter de la musique ...
à suivre ...

nikotinux
Posts: 670
Joined: Sat Feb 02, 2013 2:11 am

Re: Lancement d’un programme au démarrage - SystemD

Thu Jul 12, 2018 4:04 pm

le type doit être forking pour un script python.
simple c'est pour les programme écris spécifiquement pour être des deamons et qui se forkent eux même (très grossièrement !)

LuuB
Posts: 3
Joined: Thu Jun 07, 2018 8:51 am

Re: Lancement d’un programme au démarrage - SystemD

Fri Jul 13, 2018 8:09 am

Bonjour,

Merci beaucoup pour vos réponses, vous avez résolu mon problème !!

En effet, après des essais, l'utilisateur pi est suffisant !
J'ai donc modifié mon programme en changeant également le type en forking, et ça marche, c'est super !!

Ce sujet est donc résolu (très rapidement grâce à vous) :D
Dois-je le fermer ou quelque chose comme ça ? (c'est la première fois que je poste )

Bonne journée,

A+

LuuB
Posts: 3
Joined: Thu Jun 07, 2018 8:51 am

Re: Lancement d’un programme au démarrage - SystemD

Fri Aug 10, 2018 9:23 am

Bonjour à tous,

Je reviens vers vous, parce que j'ai encore un petit problème avec mon lancement de programme au démarrage.

Celui ci se lance, mais au bout de quelques minutes il n'est plus fonctionnel..

Quand je consulte son état à ce moment à l'aide de la commande

Code: Select all

 service programme_musical_start status 
J'obtiens ce message :

Code: Select all

programme_musical_start.service - application musique python
Loaded: loaded (etc/systemd/system/programme_musical_start.service; enabled; vendor preset: enabled)
Active: [color=#BF0000]failed [/color](Result: timeout) since Fri 2018-08-10 08:25:16 UTC; 50s ago
Process: 622 ExecStart=/usr/bin/python /home/pi/Documents/programme_final_final_final.py (code=killed, signal=TERM)

août 10 08:22:59 raspberrypi systemd[1]: Starting application musique python...
août 10 08:25:16 raspberrypi systemd[1]: programme_musical_start.service: Start operation timed out. Terminating
août 10 08:25:16 raspberrypi systemd[1]: [color=#800000]Failed to start application musique python[/color].
août 10 08:25:16 raspberrypi systemd[1]: programme_musical_start.service: Unit entered failed state.
août 10 08:25:16 raspberrypi systemd[1]: programme_musical_start.service: Failed with result 'timeout'.

Donc, il y a un problème avec le temps d'exécution de mon programme ?

(J'ai la même erreur avec un autre service qui me sert à lancer un programme python pour éteindre le rpi à l'aide d'un bouton.)

Avez-vous une idée de la façon de régler cela ?

Merci,

Bonne journée!

totoharibo
Posts: 3947
Joined: Thu Jan 24, 2013 8:43 am

Re: Lancement d’un programme au démarrage - SystemD

Fri Aug 10, 2018 9:59 am

petit conseil : mettre provisoirement un printf dans ton script pour imprimer l'état de quelques variables critiques mais si possible uniquement au plantage sinon cela risque d'être "verbeux".

Tu retrouveras les infos dans le log systemd ensuite

Return to “Français”