bash verrechnet sich (manchmal) beim Subtrahieren von Zeitstempeln

  • Ich habe mir ein kleines Backupscript geschrieben, um mein Thunderbird-Profil, das auf einem NAS liegt, zu sichern. Das Ganze dauert ungefähr 2 Minuten. Beim Start des scripts speichere ich die aktuelle Zeit in einer Variable:
    START=$(date +%s)

    Nach dem Backup speichere ich wieder den aktuellen Zeitstempel:
    ENDE=$(date +%s)

    Bilde die Differenz und gebe sie aus:

    DAUER=$((ENDE - START))

    echo -e "Zeit für das Backup: $DAUER Sekunden.\n"


    Oft funktioniert das auch tadellos, aber hin und wieder haut die bash Fahrkarten raus, so wie heute:

    Code
    Erstelle Backup...
    Backup erfolgreich erstellt:
    /home/uwe/Backup/thunderbird_backups/thunderbird_backup_2026-07-14_10-09-11.tar.gz
    Die älteste Datei 'thunderbird_backup_2026-07-11_10-48-04.tar.gz' wurde gelöscht.
    Zeit für das Backup: 7316 Sekunden.
    Eine Taste drücken zum Beenden.

    Da frage ich mich, wo ist mein Denkfehler? 🤔


    Hier ist das komplette bash-Script:

    Spiele PC: Ryzen 7 9800X3D, RTX5080, 64GB RAM, 2x 2TB NVMe, 1x 2TB SATA-SSD, Linux Mint 22.3

    Küchen Laptop: Framework 16, Ryzen 7 7840HS, Radeon RX 7700S, 32GB RAM, 2TB NVMe, Linux Mint 22.3

  • Uwe S. July 14, 2026 at 1:10 PM

    Changed the title of the thread from “bash verrechnet (manchmal) sich beim Subtrahieren von Zeitstempeln” to “bash verrechnet sich (manchmal) beim Subtrahieren von Zeitstempeln”.
  • Ohne die gesetzten Zeitstempel wird dir keiner helfen können ich vermute irgendwie bekommt die Bash falsche Zeitstempel.

    Sind es immer so um die ca 7200 Sekunden? Oder in welchem Bereich variiert der Abweichung?

    Ich würde mir einfach die eingelsenen Zeitstempel ausgeben lassen im Script.

    P.S. Warum nutzt du nicht einfach den time Befehl?

  • Den time-Befehl nutze ich nicht, weil ich das Script über einen Starter von Cinnamon auf dem Desktop starte. Wenn ich das Script komplett abarbeiten lasse schließt sich das Terminal Fenster und ich sehe die Ausgabe nicht. Deshalb auch der read-Befehl am Ende.

    Ich werde das Script erweitern, so dass die beiden gespeicherten Zeitstempel mit ausgegeben werden, und dann mal schauen.

    Und ja, sind immer so um die 7300 Sekunden.

    Spiele PC: Ryzen 7 9800X3D, RTX5080, 64GB RAM, 2x 2TB NVMe, 1x 2TB SATA-SSD, Linux Mint 22.3

    Küchen Laptop: Framework 16, Ryzen 7 7840HS, Radeon RX 7700S, 32GB RAM, 2TB NVMe, Linux Mint 22.3

  • UTC+2 würde ich auch sofort denken, aber ich tippe auf den auch angesprochenen möglichen NTP-Sync. Dieser kann die Wanduhrzeit aus date springen lassen. Nutz lieber den monotonischen Ticker seit Systemstart, der ist unbeeinflußbar und z.B. aus /proc/uptime auslesbar.

  • Ja, es ist ein Dual-Boot System (eigentlich sogar Triple-Boot).
    Ich habe gerade mal die Windows-Installation gestartet, und da hängt die Uhr tatsächlich 2 Stunden hinterher.

    Jetzt zermarter ich mir das Hirn, ob ich gestern Windows gestartet hatte. 🤔

    Aber ist ein guter Ansatz mit der Differenz zwischen UTC und MESZ. ☝️
    Merkwürdig nur, dass scheinbar wärend der Laufzeit des Scripts von UTC auf MESZ umgestellt wird. Ich werde das weiter beobachten. Erst mal danke für die Tipps. 🙂

    Spiele PC: Ryzen 7 9800X3D, RTX5080, 64GB RAM, 2x 2TB NVMe, 1x 2TB SATA-SSD, Linux Mint 22.3

    Küchen Laptop: Framework 16, Ryzen 7 7840HS, Radeon RX 7700S, 32GB RAM, 2TB NVMe, Linux Mint 22.3

  • UTC+2 würde ich auch sofort denken, aber ich tippe auf den auch angesprochenen möglichen NTP-Sync. Dieser kann die Wanduhrzeit aus date springen lassen. Nutz lieber den monotonischen Ticker seit Systemstart, der ist unbeeinflußbar und z.B. aus /proc/uptime auslesbar.

    Das würde dann in meinem Skript so funktionieren?
    start_time=$(awk '{print $1}' /proc/uptime)

    Spiele PC: Ryzen 7 9800X3D, RTX5080, 64GB RAM, 2x 2TB NVMe, 1x 2TB SATA-SSD, Linux Mint 22.3

    Küchen Laptop: Framework 16, Ryzen 7 7840HS, Radeon RX 7700S, 32GB RAM, 2TB NVMe, Linux Mint 22.3

  • Linux speichert die Uhrzeit im BIOS als UTC, Windows hingegen nimmt Ortszeit, also UTC+2 im Moment. Dass kann man aber meines Wissens nach ändern, dann ist dieses Verhalten behoben und Windows nutzt ebenfalls UTC

    Linux wird vermutlich wenn dass Script zu früh gestartet wird sich via NTP die Zeit holen und dann umstellen.

  • Ich werde recherchieren, wie ich das in Windows anpassen kann, solange das noch nötig ist. Mein Ziel ist es zeitnah auf Windows ganz verzichten zu können. Und da bin ich auf einem guten Weg, denke ich.

    Derweil habe ich ertst mal den Tipp von algl umgestetzt. Das sieht jetzt so aus:

    Code
    ...
    start_time=$(awk '{print $1}' /proc/uptime)
    ...
    end_time=$(awk '{print $1}' /proc/uptime)
    
    DAUER=$(echo "$end_time - $start_time" | bc)
    echo -e "Zeit für das Backup: $DAUER Sekunden.\n"
    ....


    Funktioniert! :)
    Danke noch mal!

    Spiele PC: Ryzen 7 9800X3D, RTX5080, 64GB RAM, 2x 2TB NVMe, 1x 2TB SATA-SSD, Linux Mint 22.3

    Küchen Laptop: Framework 16, Ryzen 7 7840HS, Radeon RX 7700S, 32GB RAM, 2TB NVMe, Linux Mint 22.3

  • Ok


    Alternativ hätte ich Windows 11 auf UTC mgestellt.

    BEISPIEL NICHT AUSFÜHREN

    Nicht ausführen ohne Rückfrage

    reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /t REG_DWORD /d 1 /f

  • Ok


    Alternativ hätte ich Windows 11 auf UTC mgestellt.

    BEISPIEL NICHT AUSFÜHREN

    Nicht ausführen ohne Rückfrage

    reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /t REG_DWORD /d 1 /f

    Warum nicht ausführen (ohne Rückfrage)? Den Registry-Hack hatte ich mir vorhin auch gegooglet... 🤔

    Spiele PC: Ryzen 7 9800X3D, RTX5080, 64GB RAM, 2x 2TB NVMe, 1x 2TB SATA-SSD, Linux Mint 22.3

    Küchen Laptop: Framework 16, Ryzen 7 7840HS, Radeon RX 7700S, 32GB RAM, 2TB NVMe, Linux Mint 22.3

  • Moin Leute


    Ich habe damit erreicht was ich erreichen wollte.😉.
    Ich arbeite hier in der Firma an 4 unterschiedlichen Systemen das Pixel mitgerechnet.
    Wenn ich dann mal was poste was ich nicht selber ausprobieren kann, stelle ich es zur Debatte. 😀


    Besser einen Codesnip debattieren als Anspruchsfrei übernehmen.
    Bei Linux habe ich eine 99 % Sicherheit das es funktioniert weil es von mir selber kommt. Bei Google hacks nicht.


    Schönen sonnigen Tag euch allen

  • Besser einen Codesnip debattieren als Anspruchsfrei übernehmen.
    Bei Linux habe ich eine 99 % Sicherheit das es funktioniert weil es von mir selber kommt. Bei Google hacks nicht.

    Okay. Das macht natürlich Sinn. :thumbup:

    Spiele PC: Ryzen 7 9800X3D, RTX5080, 64GB RAM, 2x 2TB NVMe, 1x 2TB SATA-SSD, Linux Mint 22.3

    Küchen Laptop: Framework 16, Ryzen 7 7840HS, Radeon RX 7700S, 32GB RAM, 2TB NVMe, Linux Mint 22.3

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!