php, mysql, cron und die falsche Zeit

Hallo, auf meinem Rechner laufen neben cron auch mysql und apache2 mit php. Die Zeit des Rechners ist auf UTC eingestellt. Mittels eines php-Skriptes frage ich die Werte von sensors, hddtemp ("netcat localhost 7634" <- Danke für diesen Tipp) und apcaccess und schreibe diese in eine MySQL-DB. Von dort wird sie später weiterverarbeitet. Nun zu meinem Problem: Wenn ich das Skript über den Browser (also von Hand) aufrufe, ist die Zeit korrekt. Immerhin habe ich auch unter /etc/php5/apache2/php.ini den Wert "date.timezone = 'Europe/Berlin'" gesetzt. Auch andere Zeitabfragen in php gehen richtig. Es soll aber automatisiert werden. Also habe ich mit crontab -e folgende Zeile eingefügt: # mm hh DD MM dow command */10 * * * * /usr/bin/php /srv/www/htdocs/hdd_temp/temp_cron.php Das Skript [1] wird aufgerufen und trägt mir fleißig die Werte aller 10 min. ein. Allerdings wird hier statt die _richtige_ Zeit entsprechend meines Zoneneintrages komischer Weise die _falsche_ UTC-Zeit (also 2h zurück) eingetragen. Ich habe dann aus lauter Verzweiflung in crontab eine Zeile "touch /tmp/test.zeit" eingetragen. Der Zeitstempel der Datei passt. Kann mir da jemand einen Tipp geben, wieso php die falsche Zeit hat? Gruß & Dank, Alex [1] temp_cron.php <?php include 'db_connect.inc.php'; $datum = date("Y-m-d H:i:s"); $coretemp = exec("/usr/bin/sensors | grep \"temp1\" | awk '{ print $2 }' | tr -d \"+\" | tr -d \"°C\""); $hddtemp = exec("netcat localhost 7634"); $usvtemp = exec("/usr/sbin/apcaccess | grep TIMELEFT"); $hdd_tmp = explode("|", $hddtemp); $hdd_1 = $hdd_tmp[3]; $hdd_2 = $hdd_tmp[8]; $core = substr($coretemp, 0, 4); $usv_tmp = explode(" ", $usvtemp); $usv = $usv_tmp[3]; $sql = "INSERT INTO temperatur (datum,core,hdd_1,hdd_2,usv) VALUES ('$datum',$core,$hdd_1,$hdd_2,$usv);"; echo $datum.'<br />'; echo $core.'<br />'; echo $hdd_1.'<br />'; echo $hdd_2.'<br />'; echo $usv.'<br />'; mysql_query($sql) or die (mysql_error()); mysql_close(); ?> -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org

Hallo, Am Wed, 28 Aug 2013, Alex Winzer schrieb:
Die /etc/php5/apache2/php.ini wird von /usr/bin/php nicht gelesen. Du mußt die /etc/php5/cli/php.ini anpassen, also auch dort die Zeitzone einstellen.
$coretemp = exec("/usr/bin/sensors | grep \"temp1\" | awk '{ print $2 }' | tr -d \"+\" | tr -d \"°C\"");
$coretemp = exec("/usr/bin/sensors | \ awk '/temp1/{gsub("[+°C]+","",$2);print $2;}' Oder in PHP verwursten.
$hddtemp = exec("netcat localhost 7634");
Hier solltest du meinen Vorschlag direct den Socket mit PHP aufzumachen und auszulesen verwenden (inkl. der Nachbehandlung).
Siehe oben bei $hddtemp = Du solltest das ganze auch nicht so verschachteln sondern eins nach dem anderen machen. Erst CPU, dann die HDDs, dann die USV, jew. bis du die Variablen hast, die du in die DB schieben willst.
$core = substr($coretemp, 0, 4);
Äh, $coretemp enthält doch schon nur die Temperatur.
SQL-Injection-anfällig. $query = "INSERT INTO temperatur (datum,core,hdd_1,hdd_2,usv) VALUES (?,?,?,?)" $stmt = $mysqli->prepare($query); $stmt->bind_param("sfff", $core,$hdd_1,$hdd_2,$usv); $stmt->execute(); $stmt->close(); $mysqli->close();
Auch hier wieder ungünstig verschachtelt. Ausserdem bekommst du ja die Ausgabe per Mail, also warum HTML? HTH, -dnh --

Hallo, Am Wed, 28 Aug 2013, Alex Winzer schrieb:
Die /etc/php5/apache2/php.ini wird von /usr/bin/php nicht gelesen. Du mußt die /etc/php5/cli/php.ini anpassen, also auch dort die Zeitzone einstellen.
$coretemp = exec("/usr/bin/sensors | grep \"temp1\" | awk '{ print $2 }' | tr -d \"+\" | tr -d \"°C\"");
$coretemp = exec("/usr/bin/sensors | \ awk '/temp1/{gsub("[+°C]+","",$2);print $2;}' Oder in PHP verwursten.
$hddtemp = exec("netcat localhost 7634");
Hier solltest du meinen Vorschlag direct den Socket mit PHP aufzumachen und auszulesen verwenden (inkl. der Nachbehandlung).
Siehe oben bei $hddtemp = Du solltest das ganze auch nicht so verschachteln sondern eins nach dem anderen machen. Erst CPU, dann die HDDs, dann die USV, jew. bis du die Variablen hast, die du in die DB schieben willst.
$core = substr($coretemp, 0, 4);
Äh, $coretemp enthält doch schon nur die Temperatur.
SQL-Injection-anfällig. $query = "INSERT INTO temperatur (datum,core,hdd_1,hdd_2,usv) VALUES (?,?,?,?)" $stmt = $mysqli->prepare($query); $stmt->bind_param("sfff", $core,$hdd_1,$hdd_2,$usv); $stmt->execute(); $stmt->close(); $mysqli->close();
Auch hier wieder ungünstig verschachtelt. Ausserdem bekommst du ja die Ausgabe per Mail, also warum HTML? HTH, -dnh --
participants (2)
-
Alex Winzer
-
David Haller