2009-11-07 7 views
2

Comment puis-je réécrire ceci dans un cron qui fonctionnera tous les jours pendant plus de 30 secondes? De plus, ai-je besoin d'éditer le fichier .htaccess ou php.ini dans le répertoire cron.php pour dire quelque chose? Sur le navigateur, il fonctionne très bien pendant plus de 30 secondes; sur la coque, ça marche bien aussi. Mais comme une tâche cron set, il meurt après 30 secondes. Je suis sur l'hébergement de partage 1and1.Comment obtenez-vous un Cronjob exécutant un script PHP pour exécuter plus de 30 secondes?

0 12 * * * php5 /this/is/the/file/cron.php 
+1

accepter quelques réponses –

Répondre

3

Utilisez cette syntaxe pour lancer php:

php -c /path/to/another/php.ini /this/is/the/file/cron.php 

Ensuite, vous pouvez spécifier un délai différent (ou pas de délai) dans un fichier php.ini différent.

1

Je voudrais simplement utiliser wget http://path.to.myscript.php

Si elle meurt après 30 vous devrez peut-être mettre max_execution_time = 60 dans votre php.ini pour permettre au script d'être exécuté plus de 30 secondes.

4

Il y a plusieurs choses qui pourraient mettre fin à votre script. Il pourrait s'agir du temps d'exécution maximal défini dans le fichier php.ini. Si c'est le cas, vous pouvez le remplacer dans votre script avec set_time_limit(0); où zéro signifie aucune limite et tout nombre supérieur à zéro est le nombre de secondes pour permettre l'exécution du script avant d'être terminé. Il est important de noter que cette heure n'inclut pas le temps qu'il faut au navigateur pour faire la demande, donc le temps de téléchargement de fichier ne compterait pas ici. Si vous êtes dans un environnement d'hébergement partagé (comme Dreamhost), ils ont des montres de processus qui tueront tout processus PHP après une limite de temps définie. Vous ne pouvez pas contourner ceux-ci. Vous devrez contacter le fournisseur d'hébergement pour voir ce que vous devez faire pour avoir accès au script plus longtemps (pour Dreamhost, ils veulent que vous ayez une offre PS).

0

Vous pouvez également utiliser ini_set('max_execution_time', 60)

Mais comme la page de manuel dit, dans certains cas (par exemple en cours d'exécution en mode sans échec) cela aura aucun effet: http://uk.php.net/manual/en/info.configuration.php#ini.max-execution-time

Il pourrait être également possible que la php.ini pour la ligne client a des valeurs d'exécution maximales différentes de celles du navigateur. Je l'ai vu parfois.

3
ini_set('max_execution_time', 600); 

Ajoutez ceci au début de votre fichier php et il fonctionnera pendant 600 secondes. Rien de plus n'est pas recommandé mais vous pouvez essayer si vous le souhaitez.

Questions connexes