2010-10-05 3 views
9

Ai tiré mes cheveux en essayant de savoir pourquoi mes séances sont terminées/tuées/détruites à 30 minutes. Eh bien, il semble que les systèmes basés sur Debian ont un cron spécial qui ignore toutes les configurations de php.ini et d'apache et tue toute session inactive à 30 minutes.Systèmes basés sur Debian Session tuée à 30 minutes dans un cron spécial, comment passer outre?

Le chemin de Cron: /etc/cron.d/php5

A l'intérieur du Cron:

# /etc/cron.d/php5: crontab fragment for php5 
# This purges session files older than X, where X is defined in seconds 
# as the largest value of session.gc_maxlifetime from all your php.ini 
# files, or 24 minutes if not defined. See /usr/lib/php5/maxlifetime 

# Look for and purge old sessions every 30 minutes 
09,39 *  * * *  root [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 | xargs -n 200 -r -0 rm 

Je ne suis pas mal à la configuration et la mise en place des hôtes mais je ne suis pas sysadmin. Quelqu'un pourrait-il m'aider s'il vous plaît remplacer/modifier/modifier/reconfigurer cela afin que je puisse définir la valeur plus longtemps? Je pense que 3 heures serait bien, mais je voudrais comprendre les changements, donc si quelqu'un plus haut veut rendre la session plus courte/plus longue, je documente comment configurer le changement.

Merci à toute aide de perspicacité sur ce

EDIT: Ajout/usr/lib/php5/code maxlifetime

#!/bin/sh -e 

max=1440 

for ini in /etc/php5/*/php.ini; do 
     cur=$(sed -n -e 's/^[[:space:]]*session.gc_maxlifetime[[:space:]]*=[[:space:]]*\([0-9]\+\).*$/\1/p' $ini 2>/dev/null || true); 
     [ -z "$cur" ] && cur=0 
     [ "$cur" -gt "$max" ] && max=$cur 
done 

echo $(($max/60)) 

exit 0 

il semble être à la recherche de tous les fichiers php.ini, trouve la la plus grande valeur, le compare à 1440 (qui est de 24 minutes).

Voici les fichiers php.ini

/etc/php5/apache2/php.ini 
session.gc_maxlifetime = 1440 

/etc/php5/cgi/php.ini 
session.gc_maxlifetime = 1440 

/etc/php5/cli/php.ini 
session.gc_maxlifetime = 1440 

mais pourquoi ma session de script à 30 font tuer minutes et pas 24 minutes? CRON s'exécute toutes les 30 minutes, c'est pourquoi la session semble être tué à 30 minutes d'intervalle. Mais il pourrait aussi être 24 à 54 minutes, FYI

recherche également sur le code: /usr/lib/php5/maxlifetime il prend la valeur la plus élevée et pendant mes tests je tentais d'abaisser le seuil pour accélérer la condition.

On dirait que j'ai juste besoin d'augmenter un sur les fichiers php.ini à plus d'une heure de test.

Répondre

8

Modifier le fichier /usr/lib/php5/maxlifetime

La valeur doit être en quelques secondes. Ce fichier vérifiera également votre php.ini, donc je ne sais pas pourquoi cela ne fonctionnait pas pour vous.

+0

C'est ce que je pensais aussi, mais ce fichier recherche les fichiers php.ini (tous) et trouve la plus grande valeur en seconde (qui est de 1440 ou 24 minutes). Mais ma session ne s'arrête pas avant 30 minutes et je ne peux pas comprendre pourquoi –

+4

Le travail de cron est seulement exécuté toutes les 30 minutes, donc en fait votre session peut être valide pendant 24 à 54 minutes. –

+0

merde, juste eu un moment DUH. Merci, je pense que cela va m'aider à mettre en place une session plus longue. –

3

Ceci est une question pour serverfault.com.

Toutefois, modifiez session.gc_maxlifetime dans /etc/php5/apache2/php.ini ou - si vous n'en possédez pas un - un des autres fichiers /etc/php5/*/php.ini. Le script /usr/lib/php5/maxlifetime utilisera alors le maximum pour ce paramètre trouvé dans l'un de ces fichiers.

L'édition maxlifetime n'aidera pas ou du moins jusqu'à ce que le package php5-common soit à nouveau mis à jour.

+0

compréhensible à propos de serverfault.com mais je pense aussi que c'est pertinent car j'ai mis le php.fichier ini ainsi que d'essayer de définir la valeur dans PHP lui-même et il tue toujours la session à 30 minutes, même lorsque tout est configuré pour 1440 secondes ou 24 minutes –

0

Il est là, dans votre php5 fragment cronjob:

Rechercher et purger des sessions vieilles toutes les 30 minutes

Peu importe le script purges des sessions de 24 minutes, si le script est pas exécuté plus de toutes les 30 minutes :)

1

Vous pouvez fournir votre propre chemin de la session session.save_pathOU utiliser un gestionnaire tout à fait différent session.save_handler

Vous devrez cependant fournir un mécanisme approprié pour gérer les fichiers de session indésirables.

trouvé dans mon php.ini

; NOTE: If you are using the subdirectory option for storing session files 
;  (see session.save_path above), then garbage collection does *not* 
;  happen automatically. You will need to do your own garbage 
;  collection through a shell script, cron entry, or some other method. 
;  For example, the following script would is the equivalent of 
;  setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes): 
;   cd /path/to/sessions; find -cmin +24 | xargs rm

J'ai récemment rencontré ce problème où les fichiers de session indésirables accumulaient parce que j'utilisais PHP et mod_fcgid avec une coutume session.save_path pour chaque serveur virtuel.

0

Si vous êtes venu ici parce que votre Cron est de lancer des erreurs toutes les 30 minutes (à 09 et 39) des erreurs peuvent même type dans votre syslog et/ou boîte aux lettres:

[ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 | xargs -n 200 -r -0 rm 
PHP Fatal error: Directive 'allow_call_time_pass_reference' is no longer available in PHP in Unknown on line 0 

La raison peut-être que vous upgraded your Debian to Wheezy et vous avez de vieilles entrées dans votre /etc/php5/apache2/php.ini.

J'ai dû commenter les lignes suivantes et les erreurs ont disparu.

  • allow_call_time_pass_reference
  • register_long_arrays

Im écrit cela parce que c'est l'un des résultats de Google top si vous recherchez les messages d'erreur et il peut affecter de nombreux utilisateurs/admins qui ont maintenu Thier debian- installations pour plus d'une version.

PS: Cela m'a beaucoup aidé: http://vernontbludgeon.com/blog/archives/2013/10/debian-php-session-garbage-collection-maxlifetime-fails-when-php.ini-has-obsolete-directives.html

0

utilisation ci-dessous pour supprimer des sessions Cron inutilisés.

39 20 * * * racine [-x/usr/lib/php5/maxlifetime] & & [-d/var/lib/php5] & & find/var/lib/php5/-depth -mindepth 1 - maxdepth 1 -type f -cmin + $ (/usr/lib/php5/maxlifetime) -print0 | xargs -r -0 rm

Questions connexes