Migrieren Sie das grundlegende Upstart-Skript nach systemd

17

Ich habe gerade einen Server von Ubuntu 14.10 auf 15.04 aktualisiert und einige Dienste, die ich über benutzerdefinierte Upstart-Skripte starte, werden nicht mehr ausgeführt.

Ich verstehe, dass ich sie als systemdDienste neu schreiben muss , aber der Gedanke, das gesamte systemdSystem über Nacht zu lernen , ist ein wenig entmutigend.

Das Startskript wird einfach autosshbeim Start gestartet, und ich habe einige andere ähnliche Skripte, mit denen lang laufende Prozesse gestartet werden.

#/etc/init/autossh.conf

description "Maintain a permanent SSH tunnel to <other_server>"

start on started mountall
stop on shutdown

exec autossh -N other_server

Wie kann ich dies als systemdService umschreiben?

trvrm
quelle
3
Systemd für Upstart-Benutzer ist ein guter Ausgangspunkt.
muru

Antworten:

13

die erste Regel für die Migration zu systemd

Zu diesem Zeitpunkt, im Jahr 2015, hat es höchstwahrscheinlich bereits jemand getan.

systemd gibt es schon seit einigen Jahren. Und es gab eine ganze Heimindustrie von Leuten, die Akten geschrieben und veröffentlicht haben. Insbesondere GitHub scheint Repositories von Sammlungen von Serviceeinheiten anzulocken.

In der Tat taucht das einfache Durchsuchen des WWW nach autossh.service(als Ausdruck) auf:

eine Vorlageneinheit

Das heißt, wie ich bereits an mehreren Stellen in StackExchange ausgeführt habe, ist diese Art der Migration kein mechanistischer Prozess, und manchmal führt die bloße automatische Übersetzung von allem, was in einer Unit-Datei enthalten ist, zu falschen oder zumindest schlechten Ergebnissen. In diesem Fall autosshist bei einer Schabloneneinheit positiv zu vermerken , dass sie in tatsächliche Serviceeinheiten instanziiert wird, die durch den Zielnamen parametrisiert sind. Also wie /etc/systemd/system/[email protected]haben:

[Einheit]
Description = AutoSSH-Dienst für einen Reverse-Tunnel von% i 
After = network.target

[Bedienung]
Benutzer = autossh
EnvironmentFile = / etc /% p /% i.conf
ExecStart = / usr / bin / autossh -M 0 -q -N $ SSH_USER @% i $ SSH_OPTIONS

[Installieren]
WantedBy = multi-user.target

Erstellen Sie eine Datei mit dem Namen /etc/autossh/other_server.example.conf, minimal:

SSH_USER = Joe

Es gelten dann alle üblichen Kontrollen:

  • systemctl enable autossh@other_server.example - Ermöglichen, dass eine Instanz beim Booten automatisch gestartet wird.
  • systemctl start autossh@other_server.example - Starten Sie diese Instanz sofort manuell.
  • systemctl status autossh@other_server.example - Sehen Sie seinen Status.

Und ja, die erste Regel gilt sogar dafür. Auf der Suche kann man feststellen, dass ich von Greg Freemyer bei OpenSUSE um knapp vierzehn Tage geschlagen wurde.

JdeBP
quelle
Vielen Dank - mir ist etwas Ähnliches
eingefallen
@JdeBP Ich habe auch ähnliche Frage hier . Wollte sehen, ob du mir helfen kannst.
user1950349