Ich fungiere als Systemadministrator für einige Server, die Magento-Sites enthalten, und gelegentlich füllen sie sich mit Sitzungsdateien.
Mir wurde gesagt, dass die Verwaltung dieser Dateien in Magento nicht möglich ist, und ich gehe davon aus, dass ihre temporäre Verwendung bedeutet, dass sie nicht einfach ausgeschaltet werden können, aber es ist seltsam, dass Magento keine Möglichkeit hat, diese Dateien zu entfernen Dateien?
Meine Lösung ist ein nächtlicher Crontab, der so etwas ausführt, sich find /path/to/magento/sessions/ -name "sess*" -type f -delete
aber, gelinde gesagt, unelegant anfühlt.
Wie geht man am besten damit um?
quelle
Bei dateibasierten Sitzungen werden sie vom Cron für die Bereinigung von PHP-Sitzungen automatisch bereinigt. Daher werden die Dateien wahrscheinlich innerhalb von ~ 7200 Sekunden nach der Erstellung gelöscht. Selbst auf einer geschäftigen Site (30.000 Unikate pro Tag) befinden sich normalerweise nur 4.000 Sitzungsdateien in ./var/session - was selbst für einen Low-End-Linux-Server nichts ist.
Die Bereinigung hängt jedoch von der Cron-Arbeit ab, die normalerweise nicht im Verzeichnis ./var/session von Magento angezeigt wird. Sie sollten also ein neues System-Cron einrichten
Die Standardbereinigungsdauer für Sitzungen beträgt 7200 Sekunden, was mehr als ausreichend sein sollte, obwohl Sie die oben genannten Werte entsprechend ändern können.
Bei Memcache-Sitzungen ist TCP / IP der einzige Overhead, der bei einer Bereitstellung auf einem Server langsamer als bei einer dateibasierten. Dann würden Sie stattdessen einen Unix-Socket verwenden, der diesen Overhead beseitigt und mehr Sicherheit bietet. Trotzdem werden Ihre Kundensitzungen in Bezug auf die Menge an RAM, die Sie zuweisen können, eingeschränkt. Die durchschnittliche Magento-Sitzung beträgt 4 KB - Sie können also 256 aktive Sitzungen pro MB, das Sie zuweisen, unterstützen. Stellen Sie daher sicher, dass Sie ein angemessenes Limit festlegen, um zu vermeiden, dass Kunden den Warenkorb / die Sitzung nach dem Zufallsprinzip verlieren. Beachten Sie auch, dass durch einen Neustart des Memcache-Daemons alle vorhandenen Sitzungen gelöscht werden (BAD!).
Mit Redis (nicht nativ, aber über eine Erweiterung verfügbar) erhalten Sie eine ähnliche Unterstützung wie mit Memcache, jedoch mit den zusätzlichen Vorteilen der Persistenz (falls Sie diese verwenden möchten). Mit der Erweiterung Cm_Redis können Sie auch die Sitzungskomprimierung nutzen. Wir haben festgestellt, dass diese Erweiterung sowohl bei CE- als auch bei EE-Bereitstellungen sehr gut funktioniert.
Die Standardeinstellung für das Ablaufen der Bereinigung mit DB ist mächtig 1 Woche. Bei der oben genannten Speichergröße (30.000 Einheiten pro Tag) wird eine DB-Tabellengröße für die core_cache_session von ca. 7 GB ermittelt, was sich positiv auswirkt Ihr Geschäft ist für fast alle sitzungsbasierten Vorgänge zum Stillstand gekommen.
Aufgrund unserer Erfahrung mit dem Hosting großer (230.000 eindeutige Besucher pro Tag) und kleiner (<1.000 eindeutige Besucher pro Tag) Geschäfte empfehlen wir Folgendes:
Einzelserver-Bereitstellung - Dateien
Multiserver-Bereitstellung - Redis (unter Verwendung einer separaten Datenbank aus dem Magento-Hauptcache)
Ich habe hier einige wirklich gründliche Antworten geschrieben: http://magebase.com/magento-tutorials/magento-session-storage-which-to-choose-and-why/comment-page-1/#comment-1980
quelle
Ich habe vor einiger Zeit eine verwandte Frage gestellt:
https://stackoverflow.com/questions/7828975/php-garbage-collection-clarification
Was ich nie herausgefunden habe (ich habe diesen Job für einen neuen Job verlassen und das ursprüngliche Problem wurde zu einem anderen) ist, ob Magentos Sitzungen diese Einstellungen berücksichtigen oder ob sie ihre Sitzungsbehandlung mit Zend implementieren (und vermutlich mit einer Art von zend.ini) Konfigurationsdatei).
Die PHP-Einstellungen zu sehen:
session.gc_maxlifetime
session.gc_probability
session.gc_divisor
http://php.net/manual/en/session.configuration.php#ini.session.gc-probability
quelle
Normalerweise reicht ein Cron-Job aus, aber hier sind ein paar Dinge zu beachten:
1) Legen Sie fest, dass die Sitzung nicht länger als
session.gc_maxlifetime
(php -i | grep session.gc_maxlifetime
) Sekunden dauert (dies richtet abgelaufene Sitzungen ein, die für die Garbage Collection durch die Datei php.ini oder .htaccess vorbereitet werden sollen).2) Möglicherweise möchten Sie die Sitzungen in der Datenbank speichern. Weitere Informationen hierzu finden Sie hier (diese Option ist möglicherweise einfacher über das benutzerdefinierte Magento-Modul zu verwalten).
3) Eine andere Option zu prüfen ist Memcached Hexe kann auch die Server beschleunigen (obwohl nicht vollständig mit der Frage verbunden, ich denke, es ist nützlich zu wissen, über)
Weitere Informationen finden Sie in dieser Frage: https://stackoverflow.com/questions/4353875/how-long-do-the-magento-session-files-need-to-be-kept
quelle
find
alle Dateien älter alssess.gc_maxlifetime
und sie werden entfernt. Das Löschen von Sessions über cron ist normal, sicher und akzeptabel.session.gc_probability
und absession.gc_divisor
. Wenn verschiedene Skripte unterschiedliche Werte fürsession.gc_maxlifetime
denjenigen mit dem niedrigsten Wert haben, wird bestimmt, wie lange sich etwas in der Warteschlange befindet, da der Sitzungsspeicher global ist, und die Ausführung dieses Skripts bereinigt die anderen Sitzungsobjekte des Skripts.In all unseren Setups haben wir eine maintenance.php-Datei, die sich ab und zu um die Bereinigung der Logs und des var-Verzeichnisses kümmert. Da die Sitzungen entweder in der Datenbank oder im Dateisystem gespeichert werden müssen, werden sie durch diese Wartungsdatei bereinigt. (Siehe Code unten).
Sie können den folgenden Befehl als Cron-Job ausführen, um die Protokolle zu bereinigen:
Der obige Befehl erzeugt die folgende Ausgabe:
Sie können den folgenden Befehl als Cron-Job ausführen, um den var-Ordner zu bereinigen:
Der obige Befehl erzeugt die folgende Ausgabe:
Der eigentliche Code (Vergessen Sie nicht, den Pfad zu Ihrer local.xml-Datei anzupassen):
quelle
Für Magento CMS und ähnliches (die keine alten Sitzungen bereinigen) verwende ich nur Cron-Jobs, die auf den Einstellungen von php.ini basieren.
PHP5 / Ubuntu 14.04 / Debian
Das System cron.d setup für php5 bereinigt Magento ./var/session (oder irgendetwas anderes als den Standard-Sitzungsordner (/ var / lib / php5 für Ubuntu und / var / lib / php5 / sessions oder / tmp / für die meisten anderen Linux) nicht dists).
Sie können jedoch weiterhin "sessionclean" und "maxlifetime" gemäß der Standard-PHP5 / Debian-System-Cron verwenden:
Beispiel, das Sie über die Befehlszeile ausprobieren können:
Integrieren Sie dies einfach in eine System- / Root-Crontab oder eine Crontab eines Benutzers, der über Lese- / Schreibrechte für die Sitzungsdateien verfügt:
Fügen Sie dies hinzu, wenn Sie möchten, dass es ähnlich wie System-PHP-Cron aussieht:
oder - da wir wissen, dass diese Dateien / Verzeichnisse existieren:
Jetzt habe ich eine überschaubare Anzahl von Sitzungen und es wird über die standardmäßigen Garbage Collection / Lifetime-Einstellungen in der php.ini (cli) sauber gehalten.
(Sie können den Platzhalter oben belassen oder durch den Site-Namen ersetzen.)
BEARBEITEN (PHP7 / Ubuntu 16.xx / Debian):
Das 'sessionclean'-Skript wurde geändert und das maxlifetime-Skript wurde entfernt. Für den System / PHP-Cron-Job ist es jetzt ein Skript. Sie können dies nicht mehr wirklich verwenden, da die Dateiaufrufe jetzt für Skripte statisch sind.
Das ältere php5 sessionclean Skript kann immer noch für Sie arbeiten, wenn das System nicht aufräumt . Was Sie tun können, ist das ältere Debian-PHP5-Paket zu nehmen und daraus zu extrahieren
sessionclean
. Oder Sie kopieren dies einfach in Ihren Skriptbereich (geben Sie die richtigen / var / www / (Site) -Berechtigungen / Eigentumsrechte):Ich empfehle es auch umzubenennen, damit es nicht mit dem neuen PHP 'sessionclean' Cronjob verwechselt wird. Sie können dann Ihre eigene "maxlifetime" -Nummer wie folgt eingeben:
(61 ist das Beispielalter (in Minuten) und 'MySessionClean' ist das umbenannte PHP5-Skript, das von oben heruntergeladen oder kopiert wurde).
Auf diese Weise vermeiden wir alle Aufrufe von php.ini / env.
(EDIT 13DEC2016: Aktualisierter DEBIAN ARCHIVE REPO LINK)
quelle
Ich habe die Datenbank regelmäßig von all diesen alten Sitzungsdateien gelöscht. Es war eine ärgerliche manuelle Arbeit, bis ich Magento Optimizer installiert habe , was all diese Routinearbeit für mich erledigt. Außerdem wird mein Cache ständig aktualisiert und nach dem Ändern von Produkten und statischen Blöcken nicht manuell. Oh ja, Fehlerberichte und verlassene Karren werden ebenfalls gesäubert.
quelle
Von allen obigen Kommentaren halte ich dies für die einfache Lösung und hoffe, dass es besser ist als lange Skripte und die Installation von Erweiterungen von Drittanbietern, um alte Sitzungsdateien zu verwalten und neue Sitzungsdateien zu behalten.
magento
Ordner.quelle
In meinem Fall führe ich dieses Skript aus, das in einem
magento/var/
Verzeichnis zum Löschen von Sitzungsdateien abgelegt ist, das älter als eine Woche ist (-mtime +7
):Es ist mein erstes Bash-Skript (Revision 2) und ich denke, es kann in mehrfacher Hinsicht optimiert werden. Ich bin offen für Optimierungsvorschläge.
Dieses Skript kann abgerufen werden unter: https://gist.github.com/Nolwennig/a75dc2f8628be2864bb2
quelle
Ich habe ein Skript erstellt, das das Verzeichnis var / session leert. Sie können es einem Cron-Job hinzufügen, um es einmal pro Tag auszuführen. Dies sollte ausreichen und nach Bedarf angepasst werden. Sie werden bemerken, dass es unmöglich ist, Dateien über cpanel oder ssh zu löschen, wenn das Sitzungsverzeichnis gefüllt ist. Dieses Skript erledigt den Trick, der nur im magento-Stammverzeichnis abgelegt wird.
quelle