contao / core

Contao 3 → see contao/contao for Contao 4
GNU Lesser General Public License v3.0
490 stars 214 forks source link

localconfig.php wird bei Mangelndem Server Platz überschrieben #4483

Closed Zeromax closed 12 years ago

Zeromax commented 12 years ago

Auf unserem Server ist es aus Technischen Gründen schon vorgekommen, dass unser Wepspace voll ausgenutzt war.

Komischerweise, war dann die localconfig.php Datei leer.

Wieso wird diese Datei im Normalen Betrieb beschrieben? Das kann nicht sein, dass die Konfig auf einmal weg ist.

Natürlich sollte es auch nicht vorkommen, dass der Server voll läuft ;) Aber vielleicht kann das auch sonstige Nebenwirkungen haben.

leofeyer commented 12 years ago

Bei einer Änderung der Konfiguration wird zunächst eine temporäre Datei angelegt und anschließend wird die localconfig.php ersetzt. Ist kein Platz mehr auf dem Server, bleibt die temporäre Datei leer und die localconfig.php wird durch diese leere Datei ersetzt.

Man könnte natürlich eine Routine hinzufügen, die prüft, ob die temporäre Datei leer ist oder nicht, aber in aller erster Linie bleibt das aus meiner Sicht ein Server-Problem.

@contao/workgroup-core

Zeromax commented 12 years ago

Ich habe nichts an der Seite gemacht, geändert oder Sonstige Aufrufe getätigt, welche contao dazu bringen müsste in diese Datei zu schreiben.

Die Seite war in normalem Frontend Betrieb und ich habe mich zuletzt zwei Wochen davor eingelogged.

Dann lief der Serverspeicher voll und die Datei war leer.

Klar ist das ein Server Preoblem, nur verstehe ich nicht, weshalb die Datei leer ist, wenn ich keine Konfig Einstellungen ändere.

aschempp commented 12 years ago

Der CronJob ändert die Datei, er speichert die letzte Ausführung des CronJobs.

Zeromax commented 12 years ago

Ah ok. Das erklärt, warum dann die Datei leer ist. Macht das Sinn, dass der Cronjob diese Datei beschreibt?

BugBuster1701 commented 12 years ago

@Zeromax Zum Contao Cron siehe: Was-macht-die-cron-php

Der jeweils letzte Aufruf wird in der localconfig vermerkt.

kikmedia commented 12 years ago

Man könnte jetzt natürlich auf die Idee kommen dass der Wert für den letzten Aufruf des Crons keine Konfigurationssache im engeren Sinne ist und insofern eher in einer cronconfig.php landen sollte, oder?

aschempp commented 12 years ago

erstens hättest du dann noch immer ein Problem, wenn bei jedem Seitenaufruf der cron läuft (da die letzte Ausführung nicht gespeichert werden kann). Zweitens bräuchten wir dann eine zweite Klasse, um eine zweite Datei zu beschreiben.

WENN dann sollte das höchstens in die Tabelle "tl_lock", aber ich glaube das ist da absichtlich nicht drin damit wir nicht ein DB-Query benötigen um das zu holen... Bin mir aber nicht sicher, denn die letzte Cron-Ausführung steht da ja auch bereits drin.

kikmedia commented 12 years ago

Ich glaube, ein Durchlauf des Crons nebst einer Mail an den Admin bei mangelndem Erfolg wäre mir deutlich lieber als eine komplette Leerung (wobei das jetzt akademisch ist, weil man seinen Serverplatz schon im Blick haben sollte. Leo schrieb das ja schon weiter oben. Allerdings haben wir es ja mit Leuten zu tun, die genau das nicht tun und dann mit den entsprechenden Problemen auflaufen. @leofeyer Das ist doch nicht aufwändig, die Prüfung auf leere Datei zu implementieren und dann Alarm zu schlagen, oder? Und so oft, dass sich Performanceprobleme ergeben läuft das doch auch nicht durch ...)

aschempp commented 12 years ago

Ist ja nicht so dass die Leerung absichtlich geschieht...

Zeromax commented 12 years ago

Hm. Trotzdem frage ich mich: Was hat der Letzte Cron Aufruf in der localconfig.php zu stehen. Das ist meines Erachtens Schon komisch. Für mich ist das ein Configfile in der Drinsteht, ob der Cron ausgeführt werden soll oder nicht, aber nicht das letzte Datum Uhrzeit oder Ähnliches.

Diese Datei sollte nur bei der Installation oder Systemeinstellungsänderungen Verändert werden und sonst nicht. Alles andere Ergibt keinen Sinn. Bzw. sollte der Cron irgendwo anders sich das merken.

Die Idee mit der Email, ob der Cron erfolgreich war oder nicht gefällt mir.

aschempp commented 12 years ago

Die localconfig ist aktuell die einzige Konfigurationsdatei, welche vom System beschrieben wird/werden kann. In der Datenbank speichern ist keine Option, weil dann für jede Cron-Prüfung eine DB-Verbindung aufgebaut werden müsste.

Zeromax commented 12 years ago

Das mit der Datenbankverbindung sehe ich genauso. Das soll auch so bleiben. Da das nur ein Temporärer Wert ist, wieso den nicht in einem Tmporären Ordner Speichern? Es gibt ja genügend Möglichkeiten, wo die abgelegt werden kann.

BugBuster1701 commented 12 years ago

Es gibt aber auch Erweiterungen , und auch Contao selbst, die Daten in die localconfig schreiben die sich ab und zu ändern. Da bleibt das Problem dann immer noch. Und, das Problem das nicht geschrieben werden kann, bleibt dann aber auch bestehen, ob nun in einer zweiten Datei oder in einer. Stell die vor die kann auch nicht geschrieben werden (Platte voll) dann wird der Cron bei jedem Aufruf einer Seite gestartet.(OK die Seite läuft dann noch, wenigstens etwas)

Was ich sagen will, hier wird von der falschen Seite rangegangen. Schaltet die Ursachen ab, nicht die Auswirkungen bekämpfen.

Daher bin ich auch dafür was Leo meinte zum Anfang, auch wenn es ein Serverproblem ist, prüfen ob die temporäre localconfig nicht leer bzw. die temporäre wieder auslesen und vergleichen mit den Daten die man schreiben wollte.

Zeromax commented 12 years ago

Dann muss es eben eine Richtlinie für Erweiterungen geben, dass in diese Datei nicht geschrieben werden darf, es sei denn man erweitert die Systemeinstellungen.

Ich jedenfalls bleibe bei dem Standtpunkt, dass es nichts in der localconfig.php Datei verloren hat. Ebenso wie auch alle Erweiterungen dort nichts verloren haben.

Ob von der falschen Seite Herangegangen wird? Das liegt im Auge des Betrachters ;). Und da die Ursache das Schreiben der Datei ist, wenn der Platz voll ist, ist es der cronjob. Da er dort nichts verloren hat. Er kann ja seine eigene Datei beschreiben. Die Zeit und Datum der Ausführung des cronjob ist ein temporärer Wert und kein fixer Konfig Wert.

Aber ich denke wir haben genug diskutiert ;) Entscheidet es einfach. Ihr werdet es schon richtig machen.

BugBuster1701 commented 12 years ago

Genau das tun diese Erweiterungen, sie erweitern die Systemeinstellungen weil diese ohne Tabellen auskommen wollen/können. Wenn jemand z.B. in den Einstellungen die Admin Email Adresse ändert, wird auch in der localconfig geschrieben. Oder SMTP, oder... Hier muss dann genauso drauf geachtet werden. Es ist ja nicht so, dass dort nur einmal und dann nier wieder drin geschrieben wird. Ist das Grundproblem gelöst, spielt der Cron keine Rolle mehr.

Zeromax commented 12 years ago

Heute gab es wieder ein Forum Eintrag zu dem Thema "leere Config Datei". https://www.contao-community.de/showthread.php?32811-Error-seit-heute-fr%FCh&p=214383&viewfull=1#post214383

Mittlerweile bin ich fest davon überzeugt, dass in die local config nur Fixe Config Werte rein gehören und keine Temporären Werte.

Ich hoffe es findet sich noch eine Lösung.

BugBuster1701 commented 12 years ago

Ja, die von Leo "Man könnte natürlich eine Routine hinzufügen, die prüft, ob die temporäre Datei leer ist oder nicht" im Rahmen eines Bugfixes.

Denn wie gesagt, selbst wenn es den Cron nicht gäbe, bleibt das Probem. Machste nun 2 Dateien, musste 2 Dateien prüfen bei jedem Schreiben, wozu die Mühe?

Und meine Überzeugung ist es, dass in die localconfig alles reingehört was ich brauche bevor einen DB Zugriff nötig wird bzw. was nicht in die DB gehört. Das geht so schon seit Jahren, und in 99.9 % der Installationen auch gut.

leofeyer commented 12 years ago

Behoben in da0e12f4d57cb9705cfc706a8e0fd9c9237b61b0 und bca8cf2edc1c21c0a5f9e9c765cf1ad462f61e05.

aschempp commented 12 years ago

Is there a reason to rename the tl_lock table? I'm using on in some extensions...

leofeyer commented 12 years ago

I don't want other modules to interfere with the table. Especially if you use minutely cron jobs, there is a lot of writing and reading and any other usage would just increase the risk of unnecessary waiting time.