J'agis en tant qu'administrateur système pour quelques serveurs hébergeant des sites Magento et, parfois, ils se remplissent de fichiers de session.
On m'a dit que la gestion de ces fichiers ne pouvait pas être effectuée depuis Magento et je suppose que leur utilisation temporaire signifie qu'ils ne peuvent pas être simplement désactivés, mais il semble étrange que Magento n'ait aucun moyen de gérer la suppression de ces fichiers. des dossiers?
Ma solution est une crontab nocturne qui exécute quelque chose comme ceci, find /path/to/magento/sessions/ -name "sess*" -type f -delete
mais cela semble peu élégant pour le moins.
Quelle est la meilleure façon de gérer ces?
Avec les sessions basées sur des fichiers, elles seront automatiquement supprimées par le cron de nettoyage de session PHP. Les fichiers risquent donc d'être supprimés dans les 7200 secondes environ suivant leur création. Ainsi, même sur un site occupé (30 000 uniques par jour), il n’ya généralement que 4 000 fichiers de session dans ./var/session - ce qui n’est même pas le cas pour un serveur Linux bas de gamme.
Cependant, le nettoyage repose en réalité sur le fonctionnement de cron, qui ne figure normalement pas dans le répertoire ./var/session de Magento. Donc, vous devriez configurer un nouveau système cron
La période de nettoyage par défaut des sessions est de 7200 secondes, ce qui devrait être plus que suffisant, bien que vous puissiez modifier ce qui précède en conséquence.
Avec les sessions Memcache, TCP / IP est le seul surcoût, ce qui, pour un déploiement à serveur unique, le ralentirait par rapport à un fichier. Dans ce cas, vous utiliseriez plutôt un socket Unix, ce qui supprime cette surcharge et améliore la sécurité. Mais même quand même, vos sessions client seront tronquées / limitées quant à la quantité de RAM que vous pouvez allouer. La session moyenne de Magento est de 4 Ko - vous pourrez donc prendre en charge 256 sessions actives, par Mo alloué. Veillez donc à définir une limite appropriée pour éviter que les clients perdent leur panier / session au hasard. Et rappelez-vous également qu'un redémarrage du démon Memcache effacera toutes les sessions existantes (BAD!).
Avec Redis (non natif, mais disponible via une extension), vous obtenez un niveau de support similaire à celui de Memcache, mais avec les avantages supplémentaires de la persistance (si vous souhaitez l’utiliser). Avec l'extension Cm_Redis, vous pourrez également tirer parti de la compression de session. Nous avons constaté que cette extension fonctionnait très bien pour les déploiements CE et EE.
Avec with DB, le paramètre d'expiration d'élagage par défaut est une puissante semaine. Par conséquent, avec la taille de magasin ci-dessus à titre d'exemple (30 Ko uniques par jour), vous rechercherez une taille de table de base de données pour core_cache_session d'environ 7 Go - ce qui réduira à néant votre magasin à un arrêt complet, pour presque chaque opération basée sur la session.
Après une expérience dans l’accueil de grands (230 000 visiteurs uniques par jour) et de petits (<1 000 visiteurs uniques par jour), nous vous recommandons:
Déploiement sur un serveur unique - fichiers
Déploiement multi-serveur - Redis (en utilisant une base de données séparée du cache principal de Magento)
J'ai écrit quelques réponses très complètes ici http://magebase.com/magento-tutorials/magento-session-storage-which-to-choose-and-why/comment-page-1/#comment-1980
la source
J'ai posé une question connexe il y a quelque temps:
https://stackoverflow.com/questions/7828975/php-garbage-collection-clarification
Ce que je n'ai jamais découvert (j'ai quitté ce travail pour un nouveau et le problème initial est devenu celui de quelqu'un d'autre) est de savoir si les sessions de Magento respecteront ces paramètres ou si elles implémentent leur traitement de session à l'aide de Zend (et vraisemblablement une sorte de zend.ini). fichier de configuration).
Les paramètres php à regarder:
session.gc_maxlifetime
session.gc_probability
session.gc_divisor
http://php.net/manual/en/session.configuration.php#ini.session.gc-probability
la source
Généralement, un travail cron est suffisant, mais voici quelques points à garder à l'esprit:
1) Configurez la session pour qu'elle ne dure pas plus de
session.gc_maxlifetime
(php -i | grep session.gc_maxlifetime
) secondes (ceci configurera les sessions expirées à préparer pour la récupération de place par le fichier php.ini ou .htaccess)2) Vous voudrez peut-être stocker les sessions dans la base de données . Pour plus d’informations sur la procédure à suivre, cliquez ici (cette option sera peut-être plus facile à gérer via le module magento personnalisé).
3) Une autre option à considérer est Memcached qui peut également accélérer les serveurs (bien que pas complètement connecté à la question, je pense qu’il est utile de savoir à propos de)
Voir cette question pour plus d’informations: https://stackoverflow.com/questions/4353875/how-long-do-the-magento-session-files-need-to-be-kept
la source
find
s agit simplement desess.gc_maxlifetime
supprimer tous les fichiers plus anciens . Supprimer des sessions via cron est un comportement normal, sûr et acceptable.session.gc_probability
etsession.gc_divisor
. Si différents scripts ont des valeurs différentes,session.gc_maxlifetime
celui avec la valeur la plus basse déterminera la durée pendant laquelle les données resteront vives depuis que le stockage de la session est global et l'exécution de ce script supprimera les objets des autres sessions de scripts.Sur toutes nos configurations, nous avons un fichier maintenance.php qui s'occupe du nettoyage des journaux et du répertoire var de temps en temps. Étant donné que les sessions doivent être enregistrées dans la base de données ou sur le système de fichiers, ce fichier de maintenance les nettoiera. (Voir code ci-dessous).
Vous pouvez exécuter la commande suivante en tant que tâche cron pour nettoyer les journaux:
La commande ci-dessus produira la sortie suivante:
Vous pouvez exécuter la commande suivante en tant que tâche cron pour nettoyer le dossier var:
La commande ci-dessus produira la sortie suivante:
Le code actuel (n'oubliez pas de modifier le chemin d'accès à votre fichier local.xml):
la source
Pour les CMS Magento et autres (qui ne nettoient pas les anciennes sessions), j’utilise simplement des tâches cron basées sur les paramètres php.ini.
PHP5 / Ubuntu 14.04 / Debian
Le programme d'installation cron.d pour php5 ne nettoie pas Magento ./var/session (ou autre chose que le dossier de session par défaut (/ var / lib / php5 pour Ubuntu et / var / lib / php5 / sessions ou / tmp / pour la plupart des autres) Linux dists).
Mais vous pouvez toujours utiliser "sessionclean" et "maxlifetime" selon le cron par défaut du système php5 / Debian:
Exemple, vous pouvez essayer depuis la ligne de commande:
Il suffit donc de l’intégrer à une crontab système / racine ou à une crontab d’utilisateur disposant des droits de lecture / écriture pour les fichiers de session:
Ajoutez ceci si vous voulez qu'il ressemble au système php cron:
ou - puisque nous savons que ces fichiers / répertoires existent:
Maintenant, j'ai un nombre gérable de sessions et il est maintenu propre via la collecte de place par défaut / durée de vie via les paramètres php.ini (cli).
(Vous pouvez laisser le caractère générique ci-dessus ou le remplacer par sitename.)
EDIT (PHP7 / Ubuntu 16.xx / Debian):
Le script 'sessionclean' a été modifié et le script maxlifetime a été supprimé. Pour le travail système / php cron, il s’agit désormais d’un seul script. Vous ne pouvez plus vraiment l'utiliser car les appels de fichiers sont maintenant statiques dans le script.
L'ancien script php5 sessionclean peut toujours fonctionner pour vous si le système ne nettoie pas. Ce que vous pouvez faire, c'est récupérer l'ancien paquet Debian php5 et en extraire
sessionclean
. Ou vous pouvez simplement copier ceci dans votre zone de scripts (en donnant les droits / var / www / (site) appropriés):Je recommande également de le renommer afin qu'il ne soit pas confondu avec le nouveau cronjob php 'sessionclean'. Vous pouvez ensuite brancher votre propre numéro "maxlifetime" comme ceci:
(61 étant l'exemple de l'âge (en minutes) et 'MySessionClean' étant le script renommé php5 téléchargé ou copié depuis ci-dessus).
De cette manière, nous évitons entièrement les appels php.ini / env.
(EDIT 13DEC2016: Mise à jour de la liaison Debian ARCHIVE REPO)
la source
J'ai effacé la base de données régulièrement de tous ces anciens fichiers de session. Le travail manuel était irritant jusqu’à ce que j’ai installé Magento Optimizer, ce qui me permet de faire tout ce travail de routine. De plus, mon cache est actualisé en permanence et je ne le fais pas manuellement après avoir modifié des produits et des blocs statiques. Oh, oui, les rapports d'erreur et les chariots abandonnés sont également nettoyés.
la source
De tous les commentaires ci-dessus, je pense que c'est la solution facile et j'espère que c'est mieux que de longs scripts et l'installation d'une extension tierce pour gérer les anciens fichiers de session et conserver les nouveaux fichiers de session.
magento
dossier.la source
Dans mon cas, j’exécute ce script placé dans le
magento/var/
répertoire des fichiers de session de suppression datant de plus d’une semaine (-mtime +7
):C'est mon premier script bash (révision 2) et je pense qu'il peut être optimisé sous plusieurs aspects. Je suis ouvert à toute suggestion d'optimisation.
Ce script peut être récupéré à l' adresse suivante : https://gist.github.com/Nolwennig/a75dc2f8628be2864bb2
la source
J'ai créé un script qui vide le répertoire var / session. Vous pouvez l'ajouter à un travail cron à exécuter une fois par jour, ce qui devrait suffire et l'ajuster si nécessaire. Vous remarquerez que lorsque votre répertoire de session est rempli, il est impossible de supprimer des fichiers via cpanel ou ssh, ce script fera l'affaire, il suffit de le placer dans le répertoire racine de magento.
la source