Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

probleme d'arret soudain de scri pt en tache cron

5 réponses
Avatar
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é
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.

5 réponses

Avatar
Thibault Taillandier
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,


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

Avatar
Olivier Miakinen

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

Avatar
John GALLET
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

Avatar
Paul
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



Avatar
John GALLET
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