|
|
|
|
||||||
![]() |
|
|
LinkBack | Outils de la discussion |
|
|
#1 (permalink) |
|
Messages: n/a
Hébergeur: |
Bonjour,
J'exécute des scripts par des tâches cron sous Debian avec un serveur Apache2 et ceux ci de façon aléatoire parfois se terminent correctement, parfois voient leur processus disparaitre complètement alors que le traitement n'est pas terminé. Lors de ces arrêts soudains je n'obtiens aucune erreur dans le fichier de log que j'ai mis en place et qui fonctionne correctement, log que j'obtiens par le symbole chevron, donc tout erreur affichée doit y être, et certaines y sont d'ailleurs mais ne correspondent pas à mon problème. Mon script contient un set_time_limit(0) étant donné que certaines tâches peuvent durer plus d'une heure, de plus j'ai rajouté l'instruction @ini_set('memory_limit','3000M') car nous traitons de gros fichiers pouvant occuper de la place en mémoire. Je ne vois donc pas ce qui pourrait provoquer ce qui ressemble pourtant à un timeout de ces scripts, d'autant que la plupart du temps si je les relance ils finissent par se terminer en allant jusqu'à la fin du script. Merci d'avance pour votre aide. |
|
|
|
#2 (permalink) |
|
Messages: n/a
Hébergeur: |
Bonjour,
Tu dis extraire la sortie des log avec > Ceci ne récupère à priori que la sortie standard STDOUT, et pas la sortie erreur STDERR. Il vaudrait mieux utiliser : $ php script.php 1>&2 > /var/log/monfichier.log Encore faut-il que les erreurs soient bien affichées, pour t'en assurer je te conseille la manière forte dans un premier temps, histoire de diagnostiquer le pb : ini_set('log_errors',1); ini_set('display_errors',1); error_reporting(E_ALL); Mieux encore, il vaudrait mieux utiliser le système de log de php : utiliser la fonction error_log('Il se passe ceci'); dans ton script, pour suivre le bon déroulement des actions. Bon courage, david a écrit : > Bonjour, > > J'exécute des scripts par des tâches cron sous Debian avec un serveur > Apache2 et ceux ci de façon aléatoire parfois se terminent correctement, > parfois voient leur processus disparaitre complètement alors que le > traitement n'est pas terminé. > Lors de ces arrêts soudains je n'obtiens aucune erreur dans le fichier > de log que j'ai mis en place et qui fonctionne correctement, log que > j'obtiens par le symbole chevron, donc tout erreur affichée doit y être, > et certaines y sont d'ailleurs mais ne correspondent pas à mon problème. > Mon script contient un set_time_limit(0) étant donné que certaines > tâches peuvent durer plus d'une heure, de plus j'ai rajouté > l'instruction @ini_set('memory_limit','3000M') car nous traitons de > gros fichiers pouvant occuper de la place en mémoire. > > Je ne vois donc pas ce qui pourrait provoquer ce qui ressemble pourtant > à un timeout de ces scripts, d'autant que la plupart du temps si je les > relance ils finissent par se terminer en allant jusqu'à la fin du script. > > > Merci d'avance pour votre aide. -- Thibault Taillandier |
|
|
|
#3 (permalink) |
|
Messages: n/a
Hébergeur: |
Le 03/10/2007 20:21, Thibault Taillandier a écrit :
> > Tu dis extraire la sortie des log avec > > Ceci ne récupère à priori que la sortie standard STDOUT, et pas la > sortie erreur STDERR. Exact. > Il vaudrait mieux utiliser : > $ php script.php 1>&2 > /var/log/monfichier.log Euh... non. C'est le flux 2 qu'il faut rediriger vers le 1, et seulement après avoir branché stdout sur le fichier de log. Donc : $ php script.php >/var/log/monfichier.log 2>&1 |
|
|
|
#4 (permalink) |
|
Messages: n/a
Hébergeur: |
Bonjour,
> J'exécute des scripts par des tâches cron sous Debian avec un serveur > Apache2 Je ne vois pas ce qu'apache vient faire là dedans. Quelle est la ligne de commande appelée en crontab ? Un wget ? a++; JG |
|
|
|
#5 (permalink) |
|
Messages: n/a
Hébergeur: |
John GALLET a écrit :
> Bonjour, > >> J'exécute des scripts par des tâches cron sous Debian avec un serveur >> Apache2 > Je ne vois pas ce qu'apache vient faire là dedans. Quelle est la ligne > de commande appelée en crontab ? Un wget ? Arrete moi si je déconnes mais n'est ce pas l'instance Apache qui répond au navigateur qui s'arrête trop tôt ? > > a++; > JG |
|
|
|
#6 (permalink) |
|
Messages: n/a
Hébergeur: |
Bonjour,
> >> J'exécute des scripts par des tâches cron sous Debian avec un serveur > >> Apache2 > > Je ne vois pas ce qu'apache vient faire là dedans. Quelle est la ligne > > de commande appelée en crontab ? Un wget ? > Arrete moi si je déconnes mais n'est ce pas l'instance Apache qui répond > au navigateur qui s'arrête trop tôt ? Ca dépend, d'où ma question. Je rappelle que PHP peut fonctionner en TROIS modes MUTUELLEMENT EXCLUSIFS pour lequel UN SEUL parle à un serveur web: 1) requête HTTP, par exemple par un navigateur ou un wget en crontab. Là, il faut un serveur web et donc son time_out va jouer. 2) mode CLI (Command Line Interface). Pas de serveur web, pas de time_out gérer de la même manière. Cf http://fr2.php.net/manual/en/features.commandline.php C'est en particulier le cas où on appelle en crontab une ligne du genre : /usr/local/php -f toto.php >& a.log NB: je perturbe volontairement mes camarades sur la redirection du canal STDERR, ceci est la syntaxe du csh ;-) 3) php-gtk (comparable dans son fonctionnement à java+awt) a++; JG |
|
![]() |
| Outils de la discussion | |
|
|