PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Shell Script zum testen, welches die Systemzeit jeweils um eine Std. nach vorne dreht



$emperf!
30.08.19, 15:29
Hallo allerseits

Ich habe eine kleine Web-Applikation geschrieben welche ich über einen Zeitraum von einem Jahr testen möchte. Dazu würde ich gerne die Systemzeit per bash script um eine Stunde nach vorne drehen und das Script via while loop 8760 mal durchlaufen lassen und jedes mal mein PHP Script ausführen.

Zum anfangen und um mit der "date" Funktion etwas zu üben, habe ich mir folgendes Script geschrieben:



#!/bin/bash
x=1
while [ $x -le 5 ]
do
date --set="now +1 hour"
DateOut=`date`
x=$(( $x + 1 ))
done
exit 0


Wenn ich es ausführe generiert es mir erwartungsgeäss die folgende Ausgabe und stellt die Systemzeit jeweils um eine Stunde nach vorne:

Fri 30 Aug 2019 04:28:59 PM CEST
Fri 30 Aug 2019 05:28:59 PM CEST
Fri 30 Aug 2019 06:28:59 PM CEST
Fri 30 Aug 2019 07:28:59 PM CEST
Fri 30 Aug 2019 08:28:59 PM CEST


Um meine WebApp zu testen dachte ich mir, muss ich nur noch mein PHP Script ausführen lassen während das bash Script durch seine Iterationen loopt.
Dazu habe ich noch die 7. Zeile hinzugefügt.




#!/bin/bash
x=1
while [ $x -le 5 ]
do
date --set="now +1 hour"
DateOut=`date`
php bash_date_test3.php
x=$(( $x + 1 ))
done
exit


Nach erneutem Ausführen des Skriptes wird jedoch das Datum nicht mehr bei jedem durchlauf des while loop eine Stunde nach vorne gedreht :confused:
Die Ausgabe sieht folgendermassen aus:

Fri 30 Aug 2019 04:45:40 PM CEST
Fri 30 Aug 2019 04:45:40 PM CEST
Fri 30 Aug 2019 04:45:40 PM CEST
Fri 30 Aug 2019 04:45:40 PM CEST
Fri 30 Aug 2019 04:45:40 PM CEST



Das PHP Skript welches ich zum Testen ausführen lasse schreibt lediglich die aktuelle Systemzeit und das Datum, welches es vom lokalen System holt in eine DB:
Die Einträge in die DB funktionieren auch problemlos, jedoch ist eben das Datum immer das selbe (Fri 30 Aug 2019 04:45:40 PM CEST), es wird also nicht um eine Stunde nach vorne gestellt.



<?php
include "config.php";
$datum_test1 = new DateTime();
$datum_test1 = $datum_test1->format('Y-m-d H:i:s');
mysqli_query($conn, "INSERT INTO bash_date_test (datum_test1) VALUES ('$datum_test1')");
?>



Hat jemand einen Tipp was ich anderst machen muss? Wie angedeutet, würde ich gerne die Systemzeit jeweils eine Stunde nach vorne drehen und dann das PHP Skript ausführen welches dann davon ausgehen sollte, dass nun einen Stunde später ist als bei der letzten Ausführung.


Vielen Dank für allfällige Hilfe zu dem Problem,
Markus

nopes
30.08.19, 22:46
Ich vermute es ist ein zeitliches ding. Heute stellt fast jedes System seine Zeit über das Internet ein, es wird regelmäßig geprüft, ob die Zeit nach passt und falls nicht wird sie korrigiert - oder du ein kurze pause in deine erste Version ein.

Klingt aber als wenn du dich auch mal hier mit befassen solltest: https://stackoverflow.com/questions/16481394/php-setting-up-emulating-fake-date (https://github.com/wolfcw/libfaketime ;))

$emperf!
31.08.19, 07:21
Hallo Nopes

Danke für deine Antwort. NTP habe ich auf diesem Server bewusst weg gelassen weil ich davon ausging, dass mir das dann dazwischen funken könnte. Die libfaketime Methode werde ich mir genauer anschauen, tönt sehr nach dem was mir weiterhelfen könnte.

Grüsse
Markus

Edit-> Habe grad festgestellt, dass "libfaketime" sowie "faketime" in Debian bereits als apt Softwarepakete vorhanden sind. Danke nochmal für den Tipp Nopes und danke an die Debian Entwickler :D