Bonsoir à tous, je suis débutant dans le monde de Linux, et j'ai quelques petits soucis avec systemd et ma RaspberryPi 3 (Raspbian). Je vous explique :
Je voudrais lancer un programme (lin_guider) au démarrage de ma Raspberry avec un service dans systemd mais le service (que j'ai appelé DEMARRAGE) plante quand il est lancé. En effet, j'obtiens ce message d'erreur sur l'écran de la Pi :
job DEMARRAGE.service/start deleted to break ordering cycle starting with multi-user.target/start
Je cherche depuis quelques jours jours une solution à ce problème, en vain.
J'ai quand même quelques pistes :
- Je suis à peu près sûr que c'est le type qui n'est pas le bon, mais je n'arrive pas à trouver le bon. Pour les targets, cela me semble logique comme cela, mais je me trompe certainement.
- j'ai trouvé comment afficher le journal de systemd, que je vous mets en pièce jointe. Personnellement, je ne sais pas trop comment l'exploiter. Vous trouverez également le service en lui-même, ainsi que ses permissions.
Merci d'avance pour vos conseils,
Arnaud.
https://www.dropbox.com/sh/d9vofbrvzv93o8o/AAA4f6-uH7OpJAF2CrVcU98Ya?dl=0
# Cycle
Posté par Cyril Brulebois (site web personnel) . Évalué à 6.
Ce n'est pas un problème de type, c'est un problème de dépendances.
graphical.target
dépend demulti-user.target
.Le
WantedBy=multi-user.target
ajoute une dépendance demulti-user.target
versDEMARRAGE.service
. LeAfter=graphical.target
ajoute une dépendance deDEMARRAGE.service
versgraphical.target
.Le tout est connu sous le nom de « serpent qui se mord la queue » (aïe).
La prochaine fois, n'hésite pas à inclure directement le
DEMARRAGE.service
dans l'entrée de forums.;)
Ça facilite les copier-coller et évite d'aller farfouiller des images sur Dropbox.
Debian Consultant @ DEBAMAX
[^] # Re: Cycle
Posté par Arnaud_P . Évalué à 1.
Ah ok ! Donc il me suffit de mettre
After=multi-user.target
en plus !J'ai modifié mon service comme ceci
Je n'ai plus de message d'erreur au début : Merci :)
Par contre, lors de la commande
systemctl status DEMARRAGE.service
, systemd me dit que mon service est chargé, mais a été "tué" parcequ'il ne trouve pas le fichier mon fichier shell danshome/pi
.Je viens de revérifier un énième fois qu'il y est bien, et je ne vois pas pourquoi il ne le trouve pas. Tout me semble pouratnt correct mais ne l'est manifestement pas… J'avoue que là, je suis complètemen perdu.
[^] # Re: Cycle
Posté par jnanar (site web personnel) . Évalué à 1.
Bonjour,
Ce n'est pas le fichier /home/pi/dem.sh qu'il ne trouve pas mais le fichier "[[:".
C'est une erreur de syntaxe dans le script. Sans voir le fichier dem.sh, difficile de donner plus d'informations.
[^] # Re: Cycle
Posté par Cyril Brulebois (site web personnel) . Évalué à 3.
Probablement juste
[[
, j'imagine que:
après est un séparateur dans le message d'erreur.Les espaces à l'intérieur des crochets sont obligatoires en shell.
Debian Consultant @ DEBAMAX
[^] # Re: Cycle
Posté par Arnaud_P . Évalué à 2.
Merci à vous deux de m'aider :)
Voici le fichier en question :
Tout ce qui est en commentaire est ce qui reste d'une ancienne tenative que je n'ai pas envie d'effacer pour ne pas faire deux fois les mêmes erreurs ;)
[^] # Re: Cycle
Posté par wismerhill . Évalué à 5. Dernière modification le 14 avril 2019 à 00:58.
C'est parce que tu force l'exécution (dans le ExecStart de ton unité) avec /bin/sh, alors que ton script est écrit pour bash ([[ est un syntaxe spécifique à bash).
Et de toute façon, essayer de faire des redirections dans l'ExecStart de l'unité systemd ne fonctionnera pas, il faut le faire dans le script lui-même.
Je te recommande de lire les pages de manuel systemd.unit et systemd.service
[^] # Re: Cycle
Posté par NeoX . Évalué à 3.
je penses meme que la ligne
peut devenir
vu que le shebang est placé en debut de dem.sh
suffit alors juste de lui donner les droits en execution
[^] # Re: Cycle
Posté par wismerhill . Évalué à 4.
Non, justement, systemd ne fait pas de redirection, donc en écrivant ça le script va obtenir en argument les valeurs: ">" "/home/pi/dem.log" "2>&1"
Si tu veux faire des redirections, c'est dans le script lui-même qu'il faut le faire (ou encapsuler dans un script qui ne sert qu'à ça).
Mais dans l'exemple donné, ça ne sert à rien, systemd redirige automatiquement les deux sortie du programme vers le journal, qu'oçn peut ensuite consulter avec journalctl, et les dernière lignes sont directement fournies quand on fait un systemctl status.
Donc, il suffit d'exécuter le script, sans rien d'autre.
# Réponse
Posté par Arnaud_P . Évalué à 1.
Salut !
Donc, à vous lire je ne pourrais écrire que ceci :
car les logs seront fournis dans le journactl et par la commande status et que le shabang du fichier bash défini "qui" exécute le fichier.
J'ai relu encore un peu plus de doc, dont celle proposée par wismerhill et suite à ça, j'ai modifié deux choses :
- les permissions du service avec
chmod 644
(rwx-r..-r..). Le fichier dem.sh a les droits en exécution pour tout les utilisateurs.- sa place. J'ai lu que pour des projets perso, il valait mieux les faire dans
/etc/systemd/system
que dans/lib/systemd/system
.# ça fonctionne... à moitié
Posté par Arnaud_P . Évalué à 1. Dernière modification le 16 avril 2019 à 15:40.
Bonjour !
Je persévère, mais j'ai toujours des erreurs qui s'affichent lors de l'exécution de mon service DEMARRAGE qui ressemble désormais à ceci
Lors de la commande
systemctl status DEMARRAGE.service
, j'obtiens ce résultatJe sens que j'avance, au moins je sais que le script dem.sh se lance, maintenant !
Par contre, lorsque j'exécute le script "manuellement", tout va bien, lin_guider se lance correctement.
Il me semble donc que c'est ce fameux "X server" qui coince… Quelqu'un a-t-il une idée de comment résoudre ce problème, ou une piste à explorer ? Je n'ai rien trouvé de bien convaincant de mon côté.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.