Anzeige:
Ergebnis 1 bis 9 von 9

Thema: Wie Zeitdifferenz mit Bash-Skript korrekt bestimmen?

  1. #1
    Registrierter Benutzer
    Registriert seit
    02.09.2006
    Beiträge
    120

    Wie Zeitdifferenz mit Bash-Skript korrekt bestimmen?

    Bei der Umstelleung letzte Nacht ist mir aufgefallen, das eines meiner Skripte
    nicht richtig funktioniert, weil es für Zeitdifferenzen den Wert von

    date %s

    verwendet und dabei offenbar NICHT wie in der manpage beschrieben die Sekunden
    seit 1.1.1970 verwendet werden sondern Datum/Uhrzeit linear, ohne
    Zeitumstellung und ohne Schaltsekunden!

    Wie kann man denn die Zeitdifferenz mit einem Bash-Skript richtig ermitteln?

  2. #2
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Moin,

    aus man date:
    Code:
           %s     seconds since `00:00:00 1970-01-01 UTC' (a GNU extension)
    Das Format sollte also schon die Sekunden OHNE Berücksichtigung einer Zeitzone anzeigen, allerdings nur, wenn Du "+%s" schreibst ;-)

    Code:
    jan@jack:~> date
    Mo Mär 30 19:46:14 CEST 2009
    jan@jack:~> date +%s;date -u +%s
    1238435251
    1238435251
    Jan

  3. #3
    Registrierter Benutzer
    Registriert seit
    02.09.2006
    Beiträge
    120
    Ok, das korrekte Format ist

    date +%s

    und das steht auch so im Skript
    Zudem sehe ich keinen Unterschied ob mit oder ohne -u und beim Nachzählen sehe ich, das date die Zeitumstellung doch korrekt mitgemacht hat

    Allerdings sehe ich das das Skript gelegentlich hängen bleibt, an genau der Stelle mit date, weil das Skript mit "set -x" beginnt und hinter dem date ein echo kommt, also eine simple Ausgabe.
    Wieso bleibt das Skript beim date +%s mit 99 % CPU load hängen?
    Geändert von Linus (30-03-2009 um 21:07 Uhr)

  4. #4
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Moin,

    das war der Sinn meines Beispiels - zu zeigen, dass date +%s zeitzonenunabhängig arbeitet ;-)

    Zu Deinem anderen Problem: Ich behaupte einfach mal, dass das nicht an einer einfachen Ausgabe liegt und auch nicht am "set -x". Um das beweisen zu können, bräuchte ich aber mal den entsprechenden Code-Abschnitt.

    Jan

  5. #5
    Registrierter Benutzer
    Registriert seit
    02.09.2006
    Beiträge
    120
    Also die simple Ausgabe mit echo steht im Skript, aber die Ausgabe mittels set -x bleibt beim date stehen.
    Es wird also das date ausgeführt, aber nicht das echo eine Zeile tiefer.
    Das ist das Misteriöse.

    Hier der Code-Ausschnitt:

    Code:
        time1=`expr \`date +%s\``
     fi 
     echo "FooBar"
    Beim heutigen Hängenbleiben ist das Ende der Ausgabe (mittels set -x):

    +++ date +%s
    + time1=

    Und das

    trap "rm -f $lockfile; sleep 5; exit" SIGHUP SIGINT SIGTERM

    funktionierte noch.

  6. #6
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Moin,

    Zitat Zitat von Linus Beitrag anzeigen
    ...
    Code:
        time1=`expr \`date +%s\``
     fi 
     echo "FooBar"
    Beim heutigen Hängenbleiben ist das Ende der Ausgabe (mittels set -x):

    +++ date +%s
    + time1=
    Da fehlen Operator und ein Operand im expr - was willst Du denn berechnen? Das Script bleibt nicht in der Ausgabe hängen, sondern in der Zuweisung an time1, und zwar weil der expr nicht beendet werden kann.

    Jan
    Geändert von jan61 (02-04-2009 um 19:24 Uhr)

  7. #7
    Registrierter Benutzer
    Registriert seit
    02.09.2006
    Beiträge
    120
    Zitat Zitat von jan61 Beitrag anzeigen
    Moin,
    Da fehlen Operator und ein Operand im expr - was willst Du denn berechnen? Das Script bleibt nicht in der Ausgabe hängen, sondern in der Zuweisung an time1, und zwar weil der expr nicht beendet werden kann.
    Jan
    Also mit dem expr soll der Wert von

    date +%s

    in die Variable time1 geschrieben werden.
    Das funktioniert meistens, aber nicht immer, nachdem es monatelang problemlos lief.
    Wie muß die Zeile mit dem date denn richtig aussehen?
    Reicht ein

    time1=$(date +%s)

    ?

  8. #8
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Moin,

    ja, das reicht. Oder in Deiner ursprünglichen Syntax time1=`date +%s`.

    Ich habs gerade mal ausprobiert - expr läuft auch ohne 2. Operand (und gibt einfach nur den 1. Operanden aus). Überflüssig ist er auf jeden Fall. Warum das Script an der Stelle jetzt rumspinnt, muss also noch eine andere Ursache haben. Vielleicht weiter vorn im Script?

    Jan

  9. #9
    Registrierter Benutzer
    Registriert seit
    01.04.2009
    Ort
    Essen
    Beiträge
    25
    Zitat Zitat von Linus Beitrag anzeigen
    Bei der Umstelleung letzte Nacht ist mir aufgefallen, das eines meiner Skripte
    nicht richtig funktioniert, weil es für Zeitdifferenzen den Wert von

    date %s

    verwendet und dabei offenbar NICHT wie in der manpage beschrieben die Sekunden
    seit 1.1.1970 verwendet werden sondern Datum/Uhrzeit linear, ohne
    Zeitumstellung und ohne Schaltsekunden!
    Naja die UTC Zeit oder anders gesagt die "Sekunden die seit 1.1.1970" vergangen sind enthalten natürlich keine Zeitumstellung und Schaltsekunden etc.

    Mit Sekunden die Seit 1.1.1970 vergangen sind, sind wirklich die "reale" Sekunden gemeint die seit dem vergangen sind.

    Und bei einer Zeitumstellung sind ja nicht auf einmal 3600 Sekunden von einer auf der anderen Sekunde mehr vergangen, sondern es ist nur eine Sekunde an Zeit vergangen, aber von 2 uhr einfach auf 3 uhr gestellt worden. Dadurch sind aber ja nicht mehr sekunden in der zeit vergangen.

    Ansonsten wenn du mit der "nicht echten Zeit" (naja etwas blöder begriff, weiß aber nicht wie man es besser beschreibt) rechnen möchtest ist die UTC Zeit falsch, das geht damit nicht.

    Ansonsten müsstest du auch eine Zeitzone angeben, den die Zeitumstellung ist nicht immer gleich und nach festen Regeln definiert sondern sind komplett Politische entscheidungen!


    Von daher hat das ganze schon alles richtig gemacht, nur war es wohl nicht das was du wolltest.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •