Wie lange läuft der Linux-Server bereits ohne Reboot? Und wie oft ist das System unbeobachtet neu gestartet? Solche Fragen beantwortet das kleine Tool Tuptime.
Läuft ein Linux-System längere Zeit, spricht dies zwar für seine Stabilität, je nach Distribution dürften aber einige Aktualisierungen auf ihre Installation warten. Startet umgekehrt das System sehr häufig neu, liegt unter Umständen ein Fehler in der Konfiguration vor – oder eine Komponente gibt langsam den Geist auf. Bei einem Arbeitsplatzrechner bekommt man solche Neustarts recht schnell zu spüren, auf einem entfernt im Stillen vor sich werkelnden Server jedoch nicht unbedingt.
Wie lange ein System bereits ununterbrochen läuft, ermittelt auf der Kommandozeile der Aufruf uptime. Wesentlich mehr Informationen spuckt jedoch dessen Kollege Tuptime [1] aus. Darunter finden sich auch wertvolle Informationen in Form der Anzahl der Neustarts und der jeweils verwendeten Kernel-Version.
Einspieler
Während Uptime auf fast jedem System bereitsteht, müssen Sie Tuptime gesondert installieren. Einige Distributionen halten das Tool bereits in ihren Repositories vor, wie etwa Debian und Ubuntu. Arch-Linux-Nutzer finden Tuptime im AUR, CentOS-Anwender im EPEL-Repository. Auf jedem beliebigen Linux-System installieren Sie Tuptime mit dem Einzeiler aus Listing 1, der Curl voraussetzt.
Listing 1
$ curl -Ls https://git.io/tuptime-install.sh | sudo bash
Tuptime selbst besteht aus einem Python-Skript und verlangt Python 3 mit den Modulen sys, os, optparse, sqlite3, locale, platform, datetime und logging. Die sollten auf den meisten Distributionen bereits vorinstalliert sein.
Zeitmessung
Nach dem Einrichten des Programms fragen Sie per tuptime im Terminal den aktuellen Stand ab. Das Werkzeug liefert dabei schon ein paar grundlegende Informationen (Abbildung 1): Ganz oben verrät es die Anzahl der Systemstarts. Daneben stehen die Uhrzeit und das Datum, seit die Software die Starts zählt. Alle vor diesem Datum liegenden Ereignisse kann Tuptime nicht erfassen. Um ein vollständiges Bild zu erhalten, sollten Sie das Programm daher möglichst direkt nach der Installation des Systems einrichten.

Abbildung 1: Direkt nach der Installation kann Tuptime noch nicht sehr viele Informationen liefern. Das ändert sich erst mit der Zeit.
Als Nächstes verrät Tuptime, wie oft das System bereits heruntergefahren wurde (System shutdowns). Besondere Beachtung erfordert dabei die Zahl der unkontrollierten Shutdowns hinter bad: Steigt sie rasant an, gibt es ein größeres Problem, beispielsweise eine instabile Stromversorgung. System life gibt an, wie lange Tuptime das System schon beobachtet. Wenn Sie Tuptime direkt nach der Installation der Distribution eingespielt haben, entspricht dieser Wert der Zeit seit dem ersten Boot-Vorgang (Abbildung 2).

Abbildung 2: Nach längerer Laufzeit und einige Neustarts später bieten die Daten bereits einen besseren Eindruck vom Verhalten eines Rechners.
Es folgen die Gesamtlaufzeit des Systems (System uptime) und die Zeit, die der Rechner ausgeschaltet war (System downtime). Klettert die Prozentzahl hinter System downtime über 50 Prozent, so war der Rechner länger ausgeschaltet als in Betrieb. Wie lange das System im Schnitt in Betrieb war, verrät der Wert hinter Average uptime. Analog gibt Average downtime an, wie lange der Rechner im Schnitt ausgeschaltet war. Den Abschluss bildet die Zeit seit dem letzten Systemstart (Current uptime).
Im Hintergrund
Das System ruft Tuptime kurz beim Booten und beim Herunterfahren auf. Dabei notiert sich das Tool die jeweilige Systemzeit. Aus den so gesammelten Zeitstempeln berechnet Tuptime schließlich die Gesamtlaufzeit sowie alle weiteren Werte.
Damit Tuptime automatisch beim Booten und Herunterfahren anläuft, richtet das Installationsskript tuptime-install.sh passende Startskripte ein. Auf einem Systemd-System implantiert es beispielsweise eine entsprechende Service Unit. Das Installationsskript kennt neben Systemd auch noch SysV-Init und OpenRC. Beim Einsatz des Installationsskripts läuft Tuptime zudem immer unter einem eigenen Benutzerkonto namens _tuptime.
Sollte irgendwann plötzlich der Strom ausfallen, bekäme Tuptime davon nichts mit. In der Konsequenz würde ein Zeitstempel für den Shutdown fehlen, wodurch Tuptime nicht mehr die korrekte Gesamtlaufzeit berechnen könnte. Aus diesem Grund registriert das Installationsskript zusätzlich einen Cron-Job. Er sorgt dafür, dass Tuptime in regelmäßigen Abständen startet. Alle von Tuptime notierten Zeitstempel landen in einer kleinen SQLite-Datenbank, die standardmäßig unter /var/lib/tuptime/tuptime.db liegt.
Abgeschnitten
Der Befehl tuptime -l liefert eine Liste mit allen Startvorgängen. In ihr können Sie detailliert nachlesen, wann das System wie lange in Betrieb war. Erscheint Ihnen die Liste zu unübersichtlich, bringt tuptime -t die Daten in Tabellenform Abbildung 3. Der Zusatzparameter -r dreht die Reihenfolge um, der letzte Systemstart erscheint dann ganz oben.

Abbildung 3: Tuptime bietet verschiedene Anzeigen. Hier fand seit der Installation des Werkzeugs ein Neustart statt, es gab folglich zwei Systemstarts.
Fühlen Sie sich von den Informationen immer noch erschlagen, lässt sich die Darstellung auf einen bestimmten Zeitraum einschränken. Möchten Sie beispielsweise wissen, wann und wie lange das System zwischen dem 27.07.2020 und dem 28.07.2020 aktiv war, rufen Sie Tuptime mit dem Befehl aus der ersten Zeile von Listing 2 auf. Die Parameter --tsince und --tuntil erwarten jeweils einen Zeitstempel, den Date berechnet. Diese Zeitstempel gibt Tuptime auch mit dem Parameter -s aus.
Listing 2
$ tuptime --tsince=$(date --date="2020-07-27" +%s) --tuntil=$(date --date="2020-07-28" +%s) $ tuptime --since 1 --until 5
Alternativ beschränken Sie die Ausgabe auf ganz bestimmte Startvorgänge. Interessieren Sie sich beispielsweise dafür, wie lange das System vom allerersten bis zum fünften protokollierten Startvorgang gelaufen ist, verwenden Sie den Aufruf aus der zweiten Zeile von Listing 2.
Mehr Details
Hängen Sie den Parameter -k an den Aufruf an, nennt Ihnen Tuptime die bei jedem Start verwendete Kernel-Version, mit -b liefert es noch die eindeutigen Identifikationsnummern der einzelnen Boot-Vorgänge (Abbildung 4). Mit dem Parameter -p verrät Tuptime hinter Sleeping, wie lange das System jeweils geschlafen hat; analog folgt hinter Running die aktive Zeit. Diese Werte stehen allerdings nur auf Systemen bereit, auf denen Python 3.6 oder höher installiert ist.

Abbildung 4: Hier hat das System bei beiden Systemstarts denselben Linux-Kernel verwendet. Nach dem ersten Start lief es 35 Minuten, ohne einzuschlafen.
Die bislang längste Uptime ermittelt der Befehl aus Listing 3. Länger als die dann angezeigte Uptime lief das System noch nie. Wann das war, lesen Sie in der Spalte Date ab. Der Befehl gibt die Informationen zunächst als Tabelle aus (-t), wobei der Parameter -o anhand der Uptime (u) sortiert. Der Schalter -r dreht die Sortierreihenfolge um, sodass die längste Uptime in der Tabelle ganz oben steht. head -3 beschränkt die Ausgabe auf die ersten drei Zeilen, wodurch nur noch die längste Uptime übrig bleibt.
Listing 3
$ tuptime -t -o u -r | head -3
Um die kürzeste Uptime zu erhalten, müssen Sie lediglich -r weglassen. Analog erhalten Sie die längste und kürzeste Downtime, indem Sie anstelle von u den Buchstaben d verwenden. Die längste und kürzeste Uptime sowie die längste und kürzeste Downtime präsentierten ältere Tuptime-Versionen noch von Haus aus zusammen mit den Informationen aus Abbildung 2. Bei Tuptime ab Version 5 müssen Sie die entsprechenden Informationen mit den genannten Befehlen selbst ableiten.
Frage des Formats
Auf Wunsch liefert Tuptime mit tuptime -csv alle Informationen im CSV-Format. Hängen Sie noch ein -t an, erhalten Sie eine Tabelle, die Sie in eine Datei umleiten und dann mit einer Tabellenkalkulation öffnen können. Auf diese Weise lassen sich die Daten automatisiert weiterverarbeiten.
Sollte Ihnen das Datums- und Zeitformat in den Ausgaben nicht zusagen, geben Sie kurzerhand ein eigenes vor (Listing 4). Die mit einem % beginnenden Platzhalter ersetzt Tuptime durch den entsprechenden Wert. %H steht für die Stunde, %M für die Minute, %S für die Sekunde. Analog liefert %m den Monat als Zahl, %d den Tag und %Y das Jahr. Details zu weiteren Platzhaltern erklärt die Tuptime-Dokumentation, die Sie auf Github in der Datei tuptime-manual.txt finden [1].
Listing 4
$ tuptime -d '%H:%M:%S %m-%d-%Y'
Fazit
Wer nur schnell wissen möchte, wie viel Zeit seit dem letzten Systemstart vergangen ist, kann das meist vorinstallierte Uptime aufrufen. Die Installation von Tuptime lohnt sich vor allem auf Servern und SBCs wie dem Raspberry Pi, die unbeaufsichtigt durchlaufen. Dort beobachtet Tuptime dann den Startvorgang und entlarvt so unter anderem zu viele Neustarts oder zu kurze Schlafzyklen.
Infos
-
Tuptime: https://github.com/rfrail3/tuptime





