2009-05-10 4 views
2

Je travaille sur des tâches cron pour mon application php et je prévois d'utiliser cron via wget/curl. Certains de mes travaux php cron peuvent prendre 2-3 heures. Comment laisser travailler PHP 2-3 heures de cron tab? Est-ce une bonne pratique d'exécuter des tâches aussi longues via cron wget/curl? Quelqu'un a-t-il de l'expérience à ce sujet? J'ai également la file d'attente d'email et je dois courir toutes les 10 secondes, mais l'étiquette de cron est le niveau de minute. Toute suggestion sur ce cas?travail cron de longue date via wget/curl?

Merci d'avoir lu.

Répondre

4

Lorsque vous utilisez wget/curl, vous demandez une page à partir d'un serveur Web. Chaque serveur Web aura une période d'expiration, ce qui risque d'entraîner un délai d'attente.

De même, certains fournisseurs d'hébergement peuvent arrêter le processus au-delà de certaines minutes (essentiellement pour contrôler les threads non autorisés).

Il est donc déconseillé de planifier l'utilisation de wget/curl si le travail prend plus de quelques minutes. Essayez la planification à l'aide du planificateur actuel. Vous pouvez exécuter php de la ligne de commande

php [options] [-f] [-] [args ...]

commande php doit être sur le chemin.

+0

Si j'utilise le script php à partir de la ligne de commande, cela me convient-il? Certains de mes travaux prennent vraiment beaucoup de temps. Merci pour la réponse – taras

+0

J'ai eu un script PHP exécuté pendant 14 jours, il s'est seulement écrasé à cause d'une fuite de mémoire. Rappelez-vous, pour que cela fonctionne, vous avez besoin de la version CLI de PHP. –

+0

"Certains de mes travaux prennent beaucoup de temps" C'est ok si votre hébergeur le permet. –

2

Vous pouvez utiliser ce qui suit au début de votre script pour dire PHP ne jamais efficacement le temps:

set_time_limit(0); 

Ce qui peut être plus sage est, si crontab va exécuter toutes les 24 heures le script, définissez le délai d'attente à 24 heures afin que vous n'ayez pas deux copies en cours d'exécution en même temps.

set_time_limit(24*60*60); 

Crontab permet que l'exécution de niveau minute parce que, c'est le plus souvent vous devriez vraiment lancer un script - il y a des coûts de démarrage/arrêt qui rendent la planification plus rapide inefficace. Si votre application nécessite qu'une file d'attente soit vérifiée toutes les 10 secondes, une meilleure stratégie pourrait être d'avoir un seul script de longue durée qui effectue cette vérification et utilise sleep() de temps en temps pour s'empêcher de déformer les ressources du système.

Sur un système UNIX, un tel script devrait fonctionner comme un démon - jetez un coup d'oeil au paquet PEAR System_Daemon pour voir comment cela peut être accompli simplement.

2

Je viens de rencontrer le problème avec un long script PHP exécuté via cron et wget. Le script se termine après 15 minutes en raison du délai d'attente par défaut dans wget.

Cependant, je crois que cette méthode fonctionne effectivement si vous définissez les délais d'expiration corrects. Le script PHP que vous exécutez doit être défini pour avoir un temps d'exécution illimité. Il est préférable de définir ceci au début de votre script long. Lors de l'utilisation de wget, vous devez également supprimer le délai d'expiration en passant par -T0. par exemple. Faites très attention de ne pas surcharger votre serveur avec des scripts à exécution longue.

Questions connexes