Tipps zu Upstart

Auch wenn Upstart seit Ubuntu 15.04 durch systemd abgelöst wurde, wird es doch noch eine ganze Weile durch die LTS-Version 14.04 und vor allem durch RedHat Enterprise Linux 6 sowie dessen Klonen CentOS und Scientific Linux erhalten bleiben.

Leider wurde Upstart von Canonical immer etwas stiefmütterlich behandelt bzw. hat nie so eine mediale Präsenz wie systemd erhalten. Dabei muss sich das Init-System nicht verstecken und bietet viele Funktionen, die auch systemd bietet.

Am Beispiel des Dateisynchronisationprogramms Syncthing zeige ich drei Möglichkeiten dessen Daemon auf unterschiedliche Art zu starten. Syncthing läuft dabei grundsätzlich als Hintergrunddienst mit den Rechten des jeweiligen Benutzers bzw. eines festgelegten Benutzers.

Methode 1 – Beim Systemstart ohne Benutzerlogin

Dabei wird die Init-Datei für Upstart unter /etc/init abgelegt. Über die Anweisungen setgid und setuid wird der Benutzer festgelegt, die Variable „HOME“ legt das Benutzerverzeichnis fest (Übernommen von Keeping Syncthing Running: Upstart:
description "Syncthing P2P sync service"
start on (local-filesystems and net-device-up IFACE!=lo)
stop on runlevel [!2345]

setuid „glasen“
setgid „glasen“
env STNORESTART=yes
env HOME=/home/glasen

respawn
exec /usr/bin/syncthing

Wichtig ist hierbei den korrekten Benutzer und das passende Benutzerverzeichnis festzulegen. Der Daemon läuft dabei bis das System heruntergefahren wird. Diese Lösung ist optimal für den Einsatz auf einem Server oder NAS. Bei mir läuft der Daemon auf meinem V-Server mit den Rechten eines normalen Benutzers.

Methode 2 – Starten beim Einloggen eines spezifischen Benutzers in Unity

Die Init-Datei wird hierbei im Verzeichnis ~/.config/upstart des jeweiligen Benutzers abgelegt. Die Angaben setuid, setgid und die Variable HOME können dabei entfallen. Es werden zusätzlich noch die Upstart-Stanzas „start on“ und „stop on“ abgeändert, damit der Daemon auch tatsächlich beim Einloggen und Ausloggen gestartet bzw. beendet werden:
description "Syncthing P2P sync service"
start on desktop-start
stop on desktop-end

env STNORESTART=yes
respawn
exec /usr/bin/syncthing

Methode 3 – Starten beim Einloggen eines beliebigen Benutzers

Die Datei ist identisch zur Methode zwei, sie wird nur im Verzeichnis „`/usr/share/upstart/sessions„ abgelegt. Sobald sich ein beliebiger Benutzer in Unity einloggt, wird dabei der Daemon gestartet. Diese Methode macht im Zusammenhang mit Syncthingnicht unbedingt viel Sinn, da der Daemon erst konfiguriert werden muss, damit er überhaupt richtig funktioniert (Wie z.B. die zu synchronisierenden Verzeichnisse und Geräte hinzufügen), kann aber bei anderen Diensten nützlich sein, weshalb ich sie hier aufführe.

Schaut man sich das Verzeichnis aber mal genauer an, stellt man fest, dass Ubuntu sehr starken Gebrauch von diesem macht. Das Verzeichnis enthält quasi alles was beim Starten von Unity gestartet werden muss, damit der Desktop funktioniert.  Klassisch würde dies alles über einzelnen Session-Skripte laufen, Ubuntu hatte dies über Upstart-Init-Dateien implementiert. Interessanterweise benutzt Unity dieses Verzeichnis auch noch unter Ubuntu 15.10 um einzelne Dienste zu starten, welche es zum Funktionieren benötigt. Aus diesem Grund wird auch unter der neuesten Ubuntu-Version noch das Paket „upstart“ benötigt.

Natürlich gibt es den bei den Methoden 2 und 3 auch den Weg über den Autostart-Ordner und eine desktop-Datei. Ich persönlich finde den Weg über Upstart aber eleganter, da hier auch sehr einfach Abhängigkeiten definieren kann und man auch komplexere Skript in eine Upstart-Datei packen kann. Bei den desktop-Dateien muss man dabei immer den Umweg über ein externes Skript nehmen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.