Page 1 sur 1
Besoin d'aide avec le cron
Posté : 19 mai 2007, 08:58
par cicom
Bonjour à tous!
Voila j'ai finalement pu négocier avec mon hébergeur qui a mis le cron accessible à tous ses membres.
Donc j'ai ajouté mon entrée cron, elle marche, mais le comportoment du script est autrement différent que quand on l'appel depuis un navigateur...
Le rapport cron me donne ça depuis quelques jours
/home/getsu/www/akeron/includes/daily.php: line 1: ?php
: No such file or directory
/home/getsu/www/akeron/includes/daily.php: line 2: syntax error near unexpected token `'scripts.php''
/home/getsu/www/akeron/includes/daily.php: line 2: `include ('scripts.php'); '
voici le script de daily.php
<?php
include ('scripts.php');
include ('fonctions.php');
$debut = temps();
bot();
meteo();
$fin = temps();
$total = $fin - $debut;
$total = substr($total,0,8);
echo 'Page générée en '.$total.' secondes.<br />';
?>
daily.php est en 777 (chmod) et c'est tout. Je voudrais savoir pourquoi j'obtient des messages d'erreur et comment les supprimer, ne vous inquietez pas, j'ai contrôlé, fonctions.php et scripts.php sont bien dans le même dossier...
Merci à tous de votre aide!
Posté : 19 mai 2007, 13:36
par titerm
Le cron execute un shell, pas un script php.
Il faut que tu fasses un script shell qui lui executera ton script php.
N'oublie pas non plus que l'environnement de la cron n'est pas forcement celui de ton compte et notement au niveau du PATH.
qq chose du genre
Code : Tout sélectionner
#!/bin/bash
set BINPHP=/pathvers/cli/php
set SCRIPT=/home/getsu/www/akeron/includes/daily.php
$BINPHP $SCRIPT
Posté : 19 mai 2007, 14:41
par cicom
Re,
Arf, c'est pour ça que ça ne marche pas... Les lignes de commade que tu m'as envoyées il faut que je les stock dans un fichier de quelle forme?
Merci à tous!
Posté : 19 mai 2007, 18:01
par titerm
bah un fichier text, avec un chmod 755, mais c'est un exemple, faut adapter suivant l'environnement hein...
Posté : 19 mai 2007, 18:41
par cicom
Merci j'ai fait ce que tu m'as dit, on verra demain matin quel rapport je reçois (ma tâche s'effectue tous les jours à 3H du mat)
Posté : 22 mai 2007, 06:55
par cicom
Bonjour à tous!
Donc j'ai mis en place ce que tu m'as dit, plus aucune erreur, seulement le script en lui même ne s'éxécute pas...
Comment faire?
Merci à tous!
Posté : 22 mai 2007, 07:25
par Cyrano
...le script en lui même ne s'éxécute pas...
Comment faire?...
En mettant des alertes de débuggage avec un echo($variable_xyz); à différents endroits pour vérifier que le déroulement du programme suit bien le chemin prévu : si à un endroit ça ne s'affiche plus, il faut remonter un peu jusqu'à ce que ça s'affiche normalement : le problème sera mieux cerné et plus facile à identifier.
Posté : 22 mai 2007, 21:39
par titerm
Déjà, il faudrai savoir si tu es libre d'accéder a la cron comme tu veux ou si tu as demandé que tel script soit exécuter a tel heure.
Si tu es libre, le plus rapide, c'est de mettre un déclanchement toutes les minutes jusqu'a la mise au point du script.
De plus, l'acces a la cron te permettrais de rediriger la sortie comme tu le souhaites.
Donc pour une execution toutes les minutes,
* * * * * /path/vers/ton/script 2>&1 >/path/vers/ton/script.log
Suivant le niveau de ta cron certaine syntaxe fonctionne ou pas, par exemple, pour executer toutes les 5 minutes, si cette syntaxe ne fonctionne pas, le 0,5,10,15,....,55 lui fonctionne toujours
0-59/5 * * * * /path/vers/ton/script 2>&1 >/path/vers/ton/script.log
le 2>&1 redirige l'erreur standard sur la sortie standard. Le but est d'avoir les message d'erreur dans ton fichier de log. Le >/path.../script.log sera ton fichier de log.
Un truc basique pour savoir si ton fichier est executé est de faire un touch /path.vers/unfichierTrace
Si avant execution le fichier n'existe pas et si il existe apres execution, le script est executé.
Si ton script est sous bash (#!/bin/bash sur la permiere ligne) tu peux mettre une trace pour chaque commande, une sorte de debug.
#!/bin/bash
set +x
suite de ton script
Good luck
Posté : 23 mai 2007, 14:49
par cicom
Bonjour,
Alors je vais décrire plus amplement ma situation. Je suis sur un server LINUX avec apache installé dessus, mais ce server est mutualisé, je n'ai donc pas accès ni au shell, ni à la commande, ni à autre chose, tout ce que j'ai c'est un Cpannel (v2.6.0 pour ceux qui connaissent) un peu bricolé et pas encore correctement en place (hosteur bosse dessus, on a chaque jour de nouvelles foncitons qui marchent...)
J'ai aussi php 5.2.1 et Perl 5.8.8 (c'est quoi perl?)
Je crois avoir identifié le problème que j'ai actuellement, le cron est routé vers /home/getsu/www/akeron/includes/daily.txt qui contient
#!/bin/bash
set BINPHP=/pathvers/cli/php
set SCRIPT=daily.php
$BINPHP $SCRIPT
et qui contenait précédement
#!/bin/bash
set BINPHP=/pathvers/cli/php
set SCRIPT=/home/getsu/www/akeron/includes/daily.php
$BINPHP $SCRIPT
Dans daily.php j'ai deux grosses fonctions qui s'exécutent et une qui écrit dans un fichier log.
Le cron ne me renvoit plus d'erreur c'est donc qu'il arrive à "trouver" daily.txt mais aucune éxécution n'est inscrite dans le log donc c'est que daily.php ne s'éxécute pas.
Daily.php a été testé tout seul et fonctionne parfaitement, je pense que le problème viendrait éventuellement du script daily.txt qui n'arriverait pas à trouver daily.php...
Je propose comme solution d'arriver à faire loguer les erreurs de ce script dans un autre log mais comment faire? Sinon y a t il moyen d'exectuer ce script (daily.txt) en direct pour voir s'il renvoit des erreurs? (je rappelle que je n'ai pas acès ni au schell ni au ssh)
Merci à tous!