Die generierte Systemeinheit startet beim Booten nicht

5

Ich habe ein Generatorskript (wie beschrieben von man systemd.generator ) im /etc/systemd/system-generators/ Verzeichnis.

Der Generator wird beim Booten ausgeführt und generiert erfolgreich eine Unit-Datei in dir /run/systemd/generator.late/ (Verwendung der ARGV[3] Streit). Der Generator fügt auch einen Symlink zu hinzu /run/systemd/generator.late/multi-user.target.wants/ Ich möchte den Dienst beim Booten starten (speziell wenn das Netzwerk aktiv ist).

Die Unit-Datei und der Symlink werden erfolgreich generiert. Das Problem ist, dass der Dienst nicht automatisch gestartet wird.

Wenn ich einen Befehl erteile service myService statusEs heißt inaktiv und das Log ist leer, was mich glauben lässt, dass es nicht einmal passiert ist Versuchen um den Dienst zu starten. Wenn ich mache service myService start, es beginnt (= die Gerätedatei ist in Ordnung).

Um eine Lösung für dieses Problem zu finden, habe ich diese generierte Unit-Datei nach kopiert /etc/systemd/system und manuell hinzugefügt Symlink zu /etc/systemd/system/multi-user.target.wants und startete die Maschine neu. Der Dienst wurde beim Booten gestartet.

Das alles lässt mich denken, dass der Link von /run/systemd/generator.late/multi-user.target.wants/ zu meinem Gerät reicht das nicht aus, um das zu starten erzeugt Bedienung. Ich habe andere vom System in erzeugte Gerätedateien überprüft /run/systemd/generator.late/ und sie scheinen genau dasselbe zu tun und verwenden den Symlink wie ich. Also, was ist hier los?

Gibt es eine Möglichkeit, dies zu beheben? Ist der von mir erstellte Symlink falsch? Muss ich mehr tun als nur den Symlink?

Das endgültige Generator-Skript sieht folgendermaßen aus:

#!/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"

Hinweis: Das eigentliche Skript ist etwas komplizierter, dies ist nur ein minimalistisches Beispiel.

Ich benutze Ubuntu 16.10. Ich werde bei Bedarf zusätzliche Informationen bereitstellen.

Markos
quelle

Antworten:

1

Die Möglichkeit zur Fehlerbehebung besteht darin, das System zu starten. Wenn der Dienst nicht wie erwartet gestartet wird, können Sie den folgenden Befehl ausführen:

systemd-analyse dump

Dies gibt eine sehr detaillierte Liste von Informationen zu jeder Einheit aus, einschließlich der Abhängigkeiten. Hieraus können Sie normalerweise herausfinden, warum Ihr Gerät nicht in den aktiven Zustand übergegangen ist.

deltamind106
quelle