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 status
Es 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.