Discussion:
probleme d'arret soudain de scri pt en tache cron
(trop ancien pour répondre)
david
2007-10-03 12:18:32 UTC
Permalink
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
2007-10-03 18:21:46 UTC
Permalink
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,
Post by david
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é
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
Olivier Miakinen
2007-10-03 23:12:40 UTC
Permalink
Post by Thibault Taillandier
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.
Post by Thibault Taillandier
$ 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
John GALLET
2007-10-08 14:25:48 UTC
Permalink
Bonjour,
Post by david
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
Paul
2007-10-09 10:07:55 UTC
Permalink
Post by david
Bonjour,
Post by david
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 ?
Post by david
a++;
JG
John GALLET
2007-10-09 21:32:03 UTC
Permalink
Bonjour,
Post by Paul
Post by John GALLET
Post by david
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

Continuer la lecture sur narkive:
Loading...