1 votes

Temps d'attente Apache2+PHP

Sous Ubuntu 10.10 avec Apache2 + php, le script

ne se termine pas. Ni max_execution_time ni TimeOut ne s'appliquent.

Existe-t-il un moyen de garantir l'arrêt d'un script ?

8voto

alvosu Points 8259
  • TimeOut n'a aucun effet sur mod_php.
  • max_execution_time n'affecte que le temps d'exécution du script lui-même. Les appels système utilisant system() ou exec() ne comptent pas dans le temps d'exécution, sauf sur Windows.

0voto

jonathanserafini Points 1728

Avec Apache et mod_php, vous rencontrerez un problème ici. D'autres méthodes telles que le chargement de php via fcgid ou fastcgi vous donneraient un plus grand contrôle sur la gestion des processus / le temps d'exécution / les délais d'attente / le temps d'inactivité / etc.

0voto

MagicAndi Points 10128

La réponse d'Alvosu est presque juste - mais un peu laconique.

sleep() de PHP est un simple wrapper sous l'API du planificateur du système d'exploitation. Lorsqu'il est appelé, php s'arrête d'exécuter - donc PHP ne peut pas vérifier si le temps imparti est écoulé jusqu'à ce que le temps de sommeil expire et que le planificateur l'ajoute à nouveau à la file d'attente d'exécution, et que le CPU en arrive à traiter l'instruction suivante.

Alors que cet exemple est plutôt artificiel (pourquoi écririez-vous jamais un script comme ça en sachant que vous avez un délai d'exécution en cours), il existe de nombreux scénarios où le fil d'exécution passe en dehors de l'interpréteur PHP, et il n'a donc pas l'occasion de vérifier son chronomètre - par exemple lorsque le script démarre d'autres processus, ou que le fil d'exécution est dans une extension - comme lorsqu'il attend le retour d'une requête de base de données. Le problème peut être évité en demandant au système d'envoyer un signal de retour au code PHP à un intervalle défini (pcntl_alarm) après avoir défini un gestionnaire de signal (pcntl_signal).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X