o-marc
Goto Top

Wie kommen unterschiedliche Zeitstempel auf einem Ubuntu Server zustande?

Guten Morgen Community,

in Bezug auf Webserver bin ich noch in der Lernphase und komme bei einem Problem nicht weiter.
Es handelt sich um einen Ubuntu 8.04 LAMP-Server mit Apache2.

Meine Frage lässt sich in zwei Bereiche aufteilen:

1. Warum gibt es unterschiedliche Formate beim Zeitstempel?
Alle Dateien vor einem bestimmten Datum tragen einen Zeitstempel bestehend aus Datum und Jahr:
-rw-r--r-- 1 ftpuser psacln 27711 Apr 20  2011 lang_german_alt2.conf


Füge ich Dateien hinzu (als FTP-User oder auch lokal als root), so tragen diese einen Zeitstempel bestehend aus Datum und Uhrzeit:
-rw-r--r-- 1 ftpuser psacln 28924 Sep 15 12:13 lang_german_alt3.conf


Hat jemand eine Erklärung dafür?


2. Warum stört sich der Webserver am Zeitstempelformat?
Dieser neue Zeitstempel sorgt für Probleme. Wenn ich als FTP-User eine Datei aktualisiere, dann kann der Webserver nicht auf diese zugreifen. Das führt dazu, dass die komplette Website nicht angezeigt wird und stattdessen eine Fehlermeldung kommt:

Fatal error: Smarty error: unable to write to $compile_dir '/var/www/vhosts/url/httpdocs/templates_c'. Be sure $compile_dir is writable by the web server user. in /var/www/vhosts/url/httpdocs/includes/classes/Smarty_2.6.26/Smarty.class.php on line 1097  

Nun könnte man meinen, das liege an falschen Zugriffsberechtigungen. Das ist aber nicht der Fall. Diese sind identisch und selbst ein Ändern mit "chmod 777" ändert nichts an dem Fehler. Die einzige Lösung ist, der aktualisierten Datei mit "touch -r" den Zeitstempel einer älteren Datei zu geben.

Ich kann mir nicht erklären, wieso sich der Webserver so am Zeitstempelformat stört. Weiß jemand Rat?


Viele Grüße
O.Marc

Content-ID: 180201

Url: https://administrator.de/contentid/180201

Ausgedruckt am: 25.11.2024 um 23:11 Uhr

Lochkartenstanzer
Lochkartenstanzer 08.02.2012 um 10:01:26 Uhr
Goto Top
Moin moin,

Mit was erzeugst Du die obige Ausgabe? Ein
ls -l 

führt zu der Ausgabe von z.B.
drwxr-xr-x   2 xx   xx        4096 2010-03-28 19:26 .wapi
drwxr-xr-x   3 xx   xx        4096 2010-01-06 19:26 .webex
-rw-------   1 xx   xx         134 2003-09-29 18:23 .weblink
drwxr-xr-x   4 xx   xx        4096 2010-01-06 19:25 .weechat
-rw-r--r--   1 xx   xx          32 2006-10-07 15:45 .wgetrc
drwxr-xr-x   4 xx   xx        4096 2012-01-24 07:33 .wine

I.d.R. ist die Ausgabe der zeitstempel davon abhängig, mit welchem Programm das ausgegeben wird und mit welchen Parametern dabei das Programm aufgerufen wurde.

lks
O-Marc
O-Marc 08.02.2012 um 10:13:29 Uhr
Goto Top
Hallo,

ich benutze

ls -la
.
Lochkartenstanzer
Lochkartenstanzer 08.02.2012 um 10:44:52 Uhr
Goto Top
Zitat von @O-Marc:
Hallo,

ich benutze

ls -la
.

Interessant. , sollte trotzdem sowas wie bei mir herauskommen. liegt eventuell noch ein alias auf deinem ls?

Bei mir ist auf dem 8.04-erSystem folgende ls-version:
$ls --version

ls (GNU coreutils) 6.10
Copyright © 2008 Free Software Foundation, Inc.
Lizenz GPLv3+: GNU GPL Version 3 oder höher <http://gnu.org/licenses/gpl.html>
Dies ist freie Software: Sie können sie ändern und weitergeben.
Es gibt keinerlei Garantien, soweit wie es das Gesetz erlaubt.

Geschrieben von Richard Stallman und David MacKenzie.

und auf dem 10.04-er System
$ ls --version
ls (GNU coreutils) 7.4
Copyright © 2009 Free Software Foundation, Inc.
Lizenz GPLv3+: GNU GPL Version 3 oder höher <http://gnu.org/licenses/gpl.html>
Dies ist freie Software: Sie können sie ändern und weitergeben.
Es gibt keinerlei Garantien, soweit wie es das Gesetz erlaubt.

Geschrieben von Richard M. Stallman und David MacKenzie.

Die geben hier das volle Datum aus, auch mit "ls -la".

lks
O-Marc
O-Marc 08.02.2012 um 11:54:17 Uhr
Goto Top
Bei mir wird das angezeigt:
ls (GNU coreutils) 6.10
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Richard Stallman and David MacKenzie.
.


Ganz unabhängig davon, was "ls -la" mir an Informationen ausgibt, muss es ja tatsächliche Unterschiede zwischen den Dateien geben. Sonst würde der Webserver ja keine Probleme machen.
Wie kann man sich denn noch Dateiinformationen ansehen?
Lochkartenstanzer
Lochkartenstanzer 08.02.2012 um 12:41:02 Uhr
Goto Top
versuch mal stat:
$ stat .bashrc 

  File: „.bashrc“
  Size: 8328            Blocks: 24         IO Block: 4096   reguläre Datei
Device: fb01h/64257d    Inode: 14861187    Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/      xx)   Gid: ( 1000/      xx)
Access: 2012-02-08 00:22:47.000000000 +0100
Modify: 2012-02-04 13:39:06.000000000 +0100
Change: 2012-02-04 13:39:06.000000000 +0100
O-Marc
O-Marc 08.02.2012 um 14:25:09 Uhr
Goto Top
Hier die Ausgaben:
  File: `lang_german_alt2.conf'
  Size: 27711     	Blocks: 56         IO Block: 4096   regular file
Device: 803h/2051d	Inode: 1691861     Links: 1
Access: (0644/-rw-r--r--)  Uid: (10003/ftpuser)   Gid: ( 2524/  psacln)
Access: 2012-02-03 03:25:23.000000000 +0100
Modify: 2011-04-20 10:57:59.000000000 +0200
Change: 2011-04-20 10:57:59.000000000 +0200

File: `lang_german_alt3.conf'
  Size: 28924     	Blocks: 64         IO Block: 4096   regular file
Device: 803h/2051d	Inode: 1689284     Links: 1
Access: (0644/-rw-r--r--)  Uid: (10003/ftpuser)   Gid: ( 2524/  psacln)
Access: 2012-02-03 03:25:23.000000000 +0100
Modify: 2011-09-15 12:13:02.000000000 +0200
Change: 2011-09-15 12:13:02.000000000 +0200


Sieht für mich beides sehr ähnlich aus. Kannst Du daraus etwas ableiten?
Lochkartenstanzer
Lochkartenstanzer 08.02.2012 um 15:02:54 Uhr
Goto Top
Zitat von @O-Marc:
Hier die Ausgaben:
  File: `lang_german_alt2.conf'
>   Size: 27711     	Blocks: 56         IO Block: 4096   regular file
> Device: 803h/2051d	Inode: 1691861     Links: 1
> Access: (0644/-rw-r--r--)  Uid: (10003/ftpuser)   Gid: ( 2524/  psacln)
> Access: 2012-02-03 03:25:23.000000000 +0100
> Modify: 2011-04-20 10:57:59.000000000 +0200
> Change: 2011-04-20 10:57:59.000000000 +0200


Diese Datei wurde am 20 April 2011, 10:57 erstellt und seitdem nicht mehr verändert.
Der letzte Zugriff auf die Datei erfolgte am 3. Februar dieses Hahres um 3:25.

File: `lang_german_alt3.conf'
>   Size: 28924     	Blocks: 64         IO Block: 4096   regular file
> Device: 803h/2051d	Inode: 1689284     Links: 1
> Access: (0644/-rw-r--r--)  Uid: (10003/ftpuser)   Gid: ( 2524/  psacln)
> Access: 2012-02-03 03:25:23.000000000 +0100
> Modify: 2011-09-15 12:13:02.000000000 +0200
> Change: 2011-09-15 12:13:02.000000000 +0200

Diese Datei wurde am 15. September 2011 erstellt und seitdem nicht verändert. der letzte Zugriff erfolgte wie oben am 3. februar 2012.

Was für mich darauf folgt ist, daß Du irgendwo entweder einen alias für ls definiert hast oder eine entsprechende Umgebungsvariable gesetzt ist, die das Ausgabeformat für den Zeitstempel so umstellt, daß bei bei älteren Dateien das Jahr statt der Uhrzeit gezeigt wird.

Ich komm im Moment aber gerade nciht drauf, welcher Umstand diese andere Ausgabe bewirken könnte.

lks

Schau mal nach, wie LANG gesetzt ist. ggf noch die ganzen LC-Variablen prüfen (bei mir steht alles auf C).
Arano
Arano 08.02.2012 um 15:20:34 Uhr
Goto Top
Zitat von @O-Marc:
1. Warum gibt es unterschiedliche Formate beim Zeitstempel?
[...]
Hat jemand eine Erklärung dafür?
Damit du bei Dateien die NICHT älter als ein Jahr sind noch schnell erkennen kannst zu welcher Uhrzeit sie erstellt wurden.
Wie es nun dazu kommt das es bei dem einem so gehandhabt wird und bei dem andren nicht weiß ich aber auch nicht...
Bei mir (Debian) wir der Timestamp also auch mal mit Jahr und mal mit Zeit ausgegeben
arano@lamp:~$ alias
alias ls='ls --color=auto'  
arano@lamp:~$ ls --version
ls (GNU coreutils) 8.5
Copyright © 2010 Free Software Foundation, Inc.
Lizenz GPLv3+: GNU GPL Version 3 oder höher <http://gnu.org/licenses/gpl.html>
Dies ist freie Software: Sie können sie ändern und weitergeben.
Es gibt keinerlei Garantien, soweit wie es das Gesetz erlaubt.

Geschrieben von Richard M. Stallman und David MacKenzie.
arano@lamp:~$ 
Alternativ lass dir doch mal das volle Datum ausgeben:
arano@lamp:~$ ls --full-time


2. Warum stört sich der Webserver am Zeitstempelformat?
Fatal error: Smarty error: unable to write to $compile_dir '/var/www/vhosts/url/httpdocs/templates_c'. Be  
> sure $compile_dir is writable by the web server user. in
> /var/www/vhosts/url/httpdocs/includes/classes/Smarty_2.6.26/Smarty.class.php on line 1097

Nun könnte man meinen, das liege an falschen Zugriffsberechtigungen. Das ist aber nicht der Fall. Diese sind identisch und
selbst ein Ändern mit "chmod 777" ändert nichts an dem Fehler. Die einzige Lösung ist, der
aktualisierten Datei mit "touch -r" den Zeitstempel einer älteren Datei zu geben.
Bist du dir sicher das es an der DATEI liegt !?
Ich würde da eher auf das VERZEICHNIS ($compile_dir) tippen !
Alternative hier, schau doch mal in die error_logs vom Webserver und ggf. von PHP (wenn diese nicht eh an den Webserver umgeleitet werden...)

Davon mal abgesehen, es ist nicht der Webserver der sich daran stört, es ist die Templateengine SMARTY

~Arano
O-Marc
O-Marc 08.02.2012 um 16:25:12 Uhr
Goto Top
Zitat von @Lochkartenstanzer:
Was für mich darauf folgt ist, daß Du irgendwo entweder einen alias für ls definiert hast oder eine entsprechende
Umgebungsvariable gesetzt ist, die das Ausgabeformat für den Zeitstempel so umstellt, daß bei bei älteren Dateien
das Jahr statt der Uhrzeit gezeigt wird.
Für "ls" gibt es nur ein Alias und das betrifft die Farbe.


Schau mal nach, wie LANG gesetzt ist. ggf noch die ganzen LC-Variablen prüfen (bei mir steht alles auf C).
LANG =


Aranos Erklärung klingt jedoch sehr einleuchtend.
O-Marc
O-Marc 08.02.2012 um 16:35:27 Uhr
Goto Top
Zitat von @Arano:
Damit du bei Dateien die NICHT älter als ein Jahr sind noch schnell erkennen kannst zu welcher Uhrzeit sie erstellt wurden.
Wie es nun dazu kommt das es bei dem einem so gehandhabt wird und bei dem andren nicht weiß ich aber auch nicht...
Bei mir (Debian) wir der Timestamp also auch mal mit Jahr und mal mit Zeit ausgegeben
...
Alternativ lass dir doch mal das volle Datum ausgeben:
Klingt sehr plausibel. Die vollen Timestamps unterscheiden sich nicht voneinander, außer natürlich in den Zahlen:

-rw-r--r-- 1 ftpjbsshop psacln 27711 2011-04-20 10:57:59.000000000 +0200 lang_german_alt2.conf
-rw-r--r-- 1 ftpjbsshop psacln 28924 2011-09-15 12:13:02.000000000 +0200 lang_german_alt3.conf


Bist du dir sicher das es an der DATEI liegt !?
Ich würde da eher auf das VERZEICHNIS ($compile_dir) tippen !
Alternative hier, schau doch mal in die error_logs vom Webserver und ggf. von PHP (wenn diese nicht eh an den Webserver umgeleitet
werden...)

Davon mal abgesehen, es ist nicht der Webserver der sich daran stört, es ist die Templateengine SMARTY

~Arano
Damit hast Du mich auf eine Idee gebracht. Aus Zeitmangel werde ich das erst morgen prüfen und hier posten.
Danke.
O-Marc
O-Marc 09.02.2012 um 10:06:19 Uhr
Goto Top
Guten Morgen,

zunächst einmal ein Dankeschön an Lochkartenstanzer und Arano. ;)
Leider habe ich das Problem noch nicht lösen können.

Das error_log von Apache2 ist sauber (zumindest, was diese Sache angeht) und ein error_log für php habe ich nicht gefunden. Laut "phpinfo()" ist kein Wert für ein error_log angegeben.

Zitat von @Arano:
Bist du dir sicher das es an der DATEI liegt !?
Ich würde da eher auf das VERZEICHNIS ($compile_dir) tippen !
Alternative hier, schau doch mal in die error_logs vom Webserver und ggf. von PHP (wenn diese nicht eh an den Webserver umgeleitet werden...)
An den Verzeichnisberechtigungen wurde und wird nichts verändert. Es geht wirklich nur um die Datei.
Wird die "lang.conf" per FTP ausgetauscht, führt das zu der o.g. Smarty-Fehlermeldung. Die bekomme ich wirklich nur dann wieder weg, wenn ich mit "touch -r" die Zeitstempel überschreiben lasse.

Davon mal abgesehen, es ist nicht der Webserver der sich daran stört, es ist die Templateengine SMARTY
Das stimmt.
Der "ftpuser" ist Besitzer des Verzeichnisses und aller darin liegenden Dateien und darf lesen, schreiben und ausführen.
Die Gruppe "psacln" darf lesen und ausführen. Der Webserver-User "www-data" gehört dieser Gruppe an und darf demnach wirklich nicht in das Verzeichnis schreiben. Demnach stimmt die SMARTY-Fehlermeldung. Das erklärt aber immer noch nicht, wieso ich das Problem mit "touch -r" lösen kann.

Was ich nicht verstehe ist, dass die "lang.conf" im Laufe des Jahres 2011 mehrmals per FTP getauscht wurde und das nie zu Problemen führte. Bei gleichen Verzeichnisberechtigungen.
Arano
Arano 09.02.2012 um 17:28:44 Uhr
Goto Top
Moin moin

Das erklärt aber immer noch nicht, wieso ich das Problem mit "touch -r" lösen kann.
Das stimmt !

Hm... irgendwo muss es da ja eine Veränderung geben, also mach doch mal folgendes:
  1. Sammle Informationen (chmod + timestamps) von Verzeichnis $compile_dir und der zu aktualisierenden Datei VOR dem Hochladen (also zu der Zeit als es noch funktioniert)
  2. Lade eine Datei hoch
  3. Sammle erneut die Informationen (jetzt wo es nicht mehr funktioniert)
  4. repariere wie gewohnt (touch -r)
  5. Sammle erneut die Informationen inklusive der von touch verwendeten Referenzdatei (jetzt wo es wieder läuft)

Während dessen in den Logs nach Fehlermeldungen Ausschau halten (ggf. PHP-Einstellungen ändern, loggin aktivieren, errorlevel hochschrauben,ect.)


Ich weiß zwar auchnciht ob das hilft und ob ich/wir da was finden... aber besser als raten, spekulieren und verdächtigen ist es alle mal face-smile


~Arano


EDIT:
Aber zuerst versuch mal den Vorschlag vom Lochkartenstanzer, das ist eine gute Idee !
HA und damit hätten wir auch das Verhalten von `ls` erklärt...
... A timestamp is considered to be recent if it is less than six months old, ...
Lochkartenstanzer
Lochkartenstanzer 09.02.2012 um 17:31:45 Uhr
Goto Top
Zitat von @O-Marc:
Guten Morgen,

zunächst einmal ein Dankeschön an Lochkartenstanzer und Arano. ;)
Leider habe ich das Problem noch nicht lösen können.

Schade, hier noch die Beschreibung von gnu.org wie TIME_STYLE sich auf das Ausgabeformat auswirkt. Du könntest den passenden Ausgabestring Dir mit "--time_style" zusammenbasteln und einen alias auf ls definieren, wenn das das Problem sein sollte.

Wird die "lang.conf" per FTP ausgetauscht, führt das zu der o.g. Smarty-Fehlermeldung. Die bekomme ich wirklich nur
dann wieder weg, wenn ich mit "touch -r" die Zeitstempel überschreiben lasse.


Das sieht mir eher nach einem unsauberen Programmierer aus., der nicht evrstanden hat, das sich die Ausgabe von ls mit diversen Umgebungsdbedingen verändert. Du solltest mal den ls-befehl wie oben umdefinieren und dann schauen, ob der fehler belibt oder sich verändert.

lks

PS: Ich gehe mal davon aus, daß Du Bestiz- und Zugriffsrechte geprüft hast und das nicht das das problem war, warum Dein System den Fehler meldet.
O-Marc
O-Marc 13.02.2012 um 08:56:50 Uhr
Goto Top
Guten Morgen,

ich komme derzeit nicht dazu, das Problem weiter zu verfolgen.
Noch einmal vielen Dank für die Tipps. Wenn ich mehr rausbekomme, poste ich es hier.