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.