7 votes

L'unité systemd générée ne démarre pas au démarrage

J'ai un générateur script (tel que décrit par man systemd.generator ) en /etc/systemd/system-generators/ répertoire.

Le générateur s'exécute au démarrage et génère avec succès un fichier d'unité dans le répertoire /run/systemd/generator.late/ (en utilisant le ARGV[3] argument). Le générateur ajoute également un lien symbolique à /run/systemd/generator.late/multi-user.target.wants/ car je veux lancer le service au démarrage (en particulier lorsque le réseau est en place).

Le fichier d'unité et le lien symbolique sont générés avec succès. Le problème est que le service n'est pas démarré automatiquement.

Lorsque j'envoie la commande service myService status Il est dit inactif et le journal est vide, ce qui me fait penser qu'il n'a même pas été utilisé. essayer pour démarrer le service. Si je le fais service myService start il démarre (= le fichier de l'unité est correct).

Pour tenter de trouver une solution à ce problème, j'ai copié ce fichier d'unité généré vers /etc/systemd/system et a ajouté manuellement un lien symbolique vers /etc/systemd/system/multi-user.target.wants et redémarrer la machine. Le service a bien démarré au démarrage.

Tout cela me fait penser que le lien de /run/systemd/generator.late/multi-user.target.wants/ à mon unité n'est pas suffisante pour démarrer la généré service. J'ai inspecté d'autres fichiers unitaires générés par le système en /run/systemd/generator.late/ et ils semblent faire exactement la même chose et utilisent le lien symbolique comme moi. Que se passe-t-il donc ici ?

Existe-t-il un moyen de résoudre ce problème ? Le lien symbolique que je crée est-il erroné ? Est-ce que je dois faire quelque chose de plus que le lien symbolique ?

Le générateur final script ressemble à ceci :

#!/bin/bash

serviceName=myService
bin=/path/to/my/executable
generatorDir=$3
unitFile=$generatorDir/$serviceName.service

cat > "$unitFile" <<EOF
\[Unit\]
Description=$serviceName service
After=network.target

\[Service\]
Type=simple
ExecStart=$bin

\[Install\]
WantedBy=multi-user.target
EOF

mkdir "$generatorDir/multi-user.target.wants" 2>/dev/null
ln -s "$unitFile" "$generatorDir/multi-user.target.wants/$serviceName.service"

Remarque : le véritable script est un peu plus compliqué, il s'agit simplement d'un exemple minimaliste.

J'utilise Ubuntu 16.10. Je fournirai des informations supplémentaires si nécessaire.

2voto

deltamind106 Points 121

La façon de résoudre ce problème est de démarrer votre système, et lorsque votre service ne démarre pas comme prévu, vous pouvez exécuter la commande :

systemd-analyze dump

Cela permet d'obtenir une liste très détaillée d'informations sur chaque unité, y compris les dépendances. À partir de cette liste, vous pouvez généralement comprendre pourquoi votre unité n'est pas passée à l'état actif.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X