Ich habe gerade ein Upgrade von Ubuntu Server 14 auf Version 15 durchgeführt. Ich hatte Probleme, mein Upstart-Skript nach dem Upgrade zum Laufen zu bringen, und habe gelesen, dass systemd der neue Standard ist. Ich bin weit entfernt von einem Linux-Experten, also schont mich bitte :-)
Hier ist, was mein Emporkömmlingsskript vorher war:
description "NZBGet upstart script"
setuid robert
setgid robert
start on runlevel [2345]
stop on runlevel [016]
respawn
expect fork
script
exec nzbget -D
end script
pre-stop script
exec nzbget -Q
end script
Basierend auf der Wiki-Seite "Upstart to Systemd" habe ich die dort bereitgestellten Tabellen verwendet, um die Dinge so genau wie möglich in meiner neuen Systemd-Servicedatei abzubilden:
[Unit]
Description=NZBGet Service
[Service]
Type=forking
ExecStart=/usr/local/bin/nzbget -D
ExecStop=/usr/local/bin/nzbget -Q
Restart=on-failure
Diese Datei befindet sich unter /home/robert/.config/systemd/user/nzbget.service
. So starten Sie den Dienst manuell:
$ systemctl --user start nzbget
Das funktioniert super. Wenn ich mich jedoch von meiner SSH-Sitzung abmelde, wird der Dienst beendet. Es startet auch nicht beim Booten oder bei der Benutzeranmeldung. Ich möchte, dass es sich genauso verhält wie ein Start-Service: Ich möchte, dass es beim Booten startet, ständig ausgeführt wird und als bestimmter Benutzer.
Was muss ich tun, um diese Konfiguration zu erhalten?
systemctl enable
Befehl angeben , dies war mir zunächst nicht klar. Das Aktivieren warnte mich auch vor einem fehlenden[Install]
Abschnitt. Ich habe es ignoriert, bin mir aber nicht sicher, ob es die Fähigkeit beeinträchtigen wird, beim Booten zu starten.Install
Warnung war eigentlich sehr wichtig. Es startet nicht beim Booten ohneWantedBy=multi-user.target
unter dem[Install]
Abschnitt. Nach dem Hinzufügen dieser auf die.service
Datei, dann können Sieenable
es.[Install]
Abschnitt hinzugefügt . Hoffe, es ist jetzt hilfreicher für alle, die danach suchen.[email protected]
dannenable
möchte[email protected]
die Einstellung wirdUser=%i
den Benutzer bedeutet nicht hartcodiert und können mehr Benutzer die gleiche Definition verwenden. Ein Beispiel./etc/systemd/user/
?Möglicherweise möchten Sie die "User Lingering" -Funktionalität von systemd nutzen. Es wird über aktiviert
loginctl enable-linger USERNAME
.Es wird ein separater Service Manager für den jeweiligen Benutzer beim Booten gestartet, sodass Ihre benutzerdefinierten Einheiten
~/.config/systemd/user
beim Booten und Herunterfahren entsprechend Ihrer Servicekonfiguration abgeholt und verarbeitet werden.Sie können auch
systemctl --user
zum Verwalten und Konfigurieren der Dienste verwendet werden, die auf dem Dienstmanager Ihres Benutzers und nicht auf dem des Systems ausgeführt werden.quelle
systemctl --user
ist eine fantastische Entdeckung. Vielen Dank!systemctl --user
dies für SSH-Sitzungen anscheinend nicht funktioniert.