J'ai un script PHP qui vérifie un répertoire et supprime tous les fichiers non modifiés dans les 15 secondes (c'est pour une partie). P>
Mon problème est de savoir comment faire fonctionner ce script tout le temps. J'ai mis en place un travail de cron pour fonctionner toutes les 10 minutes puis dans le script PHP, j'ai une boucle infinie avec un sommeil (10). Ma pensée était que cela dirigerait le code toutes les 10 secondes et, dans le cas, le scénario s'est arrêté, le travail cron le redémarrerait éventuellement. P>
Cependant, après le démarrage du script, il fonctionne environ 3 boucles (30 secondes), puis s'arrête. J'ai entendu PHP ne reçoit que beaucoup de mémoire par charge de fichier. P>
Comment puis-je faire une boucle de script PHP indéfiniment? Peut-être qu'il y a un moyen de s'appeler p>
6 Réponses :
Vous voudrez peut-être vérifier votre paramètre max_execution_time dans le fichier php.ini. Je crois que la valeur par défaut est de 30 secondes. La façon dont vous avez la configuration avec Cron, vous aurez probablement plusieurs instances du script fonctionnant après 10 minutes à moins que vous ajoutez une logique dans le script pour vérifier qu'une instance d'elle-même ne fonctionne pas déjà p>
php comme une langue n'est pas très bonne à courir indéfiniment. Depuis que vous avez un travail de cron toutes les dix minutes, pourquoi ne pas exécuter votre tâche 60 fois puis quitter? P>
En outre, PHP dispose de différents fichiers de configuration pour CLI et pour les modes Apache sur la plupart des serveurs Linux. Il peut donc être sage de vérifier votre etc / php / cli / php.ini et vérifier le temps d'exécution maximum et les limites de mémoire. P>
Assurez-vous que votre exécutable PHP est compilé pour une utilisation en tant qu'interprète de ligne de commande, pas un exécutable CGI. PHP tue normalement les scripts qui fonctionnent plus longtemps que Plus d'infos sur CLI vs. cgi sapis. p> Vous pouvez vérifier la SAPI de votre exécutable à l'aide de l'argument max_execution_time code> (par défaut est de 30 secondes). CLI Executables, cependant, n'impose pas cette limitation.
- version code>: p>
$ php --version
PHP 4.3.0 (cli), Copyright (c) 1997-2002 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2002 Zend Technologies
Chaque fois (avant de manquer de mémoire), sortez de la boucle et se rééchapper Exec ("/ usr / bin / php". fichier strong>); p>
Le problème avec c'est le script parent attend un retour, ce qui n'arriverait jamais. Cela fonctionnerait-il cependant: EXEC ("/ USR / BIN / PHP ./SERVERCLEANER.PHP> / dev / null 2> & 1 &"); Ou cela continue-t-il toujours à créer des scripts et de ne jamais aller à la fin?
Vous pouvez exécuter un processus PHP parent qui fourche un client à un intervalle. Si vous êtes curieux de l'explorer comme une option ici est un bon point de départ: http://ca2.php.net / pcntl bonne chose à propos de le faire de cette façon est que le processus parent peut tuer les PID clients qui ne se terminent pas dans une durée raisonnable.
Si vous cherchez quelque chose de rapide et de sale, vous pouvez écrire un BASH Script pour appeler la PHP assez facilement (si vous êtes sous Linux): p> modifier em>
Vous n'avez vraiment pas besoin du script, Bash fera tout cela sur une ligne: P> while [ "true" ]; do /path/to/script.php; sleep 15; done
J'aime cette idée. Je l'essaie maintenant.
J'ai du mal à faire fonctionner le script Bash par le cron. Y a-t-il une chose spéciale que je dois mettre, ou juste le timing, puis le chemin du script?
Vous ne devriez pas avoir besoin d'utiliser cron, il fonctionnera indéfiniment - si vous utilisez Cron, vous vous retrouverez avec beaucoup de processus faisant la même chose. Juste Chmod + x le script Bash et le démarrer: /path/to/script.sh &
Sweet, tu as travaillé, merci un bouquet tout le monde, et surtout toi Eddy!
En fait une dernière chose. Savez-vous comment je peux continuer à courir après avoir fermé la fenêtre du terminal? Je mets un & à la fin, mais cela arrêta toujours le processus après mon départ.
@William Comment avez-vous ajouté nohup code> pouvez-vous la coller ici. Merci!
Je suis depuis longtemps arrêté à l'aide de ce script, mais je pense que je mets l'appel au script PHP dans un script shell puis appelé / la programmée avec: / bin / bash /home/path/file.sh & < / code>
Il y a un module de poire pour écrire des scripts PHP à long terme. Je ne l'ai pas utilisé moi-même. p>