IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

problème de crontab


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 15
    Par défaut problème de crontab
    Bonjour,
    Je réalise un site sur RHEL4ES, et j'ai un problème de crontab. En faite j'ai besoin d'utiliser crontab pour appeller un script PHP toutes les 5 minutes (tous les jours/mois/ans). Ce script est sensé alimenter un fichier xml qui me servira plus tard à afficher les informations sur le site et donc qu'il s'auto update.
    Depuis un petit moment j'ai l'impression que le crontab ne marche plus. En effet, si je ne touche pas au script, il n'y a pas de mise à jour des infos. Lorsque j'execute mon script PHP à la main tout marche bien, les infos sont bien mise à jour.Le truc qui est bizarre c'est que dans les logs de cron tab j'ai bien la trace de l'execution du script, pas de message d'erreur specifique. Tout porte à croire que la tache planifiée s'execute correctement et pourtant non.
    J'ai eu beau rebooter le service crontab, apache, ou encore la machine elle même, rien ne change.
    Voici mon fichier /etc/crontab :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin:/opt/jre1.5.0_11/bin:/opt/IBM/db2/V8.1/lib:/opt/IBM/db2/V8.1/bin
    LD_LIBRARY_PATH=/opt/IBM/db2/V8.1/lib
    DB2INSTANCE=db2inst1
    MAILTO=root
    HOME=/
     
    # run-parts
    01 * * * * root run-parts /etc/cron.hourly
    02 4 * * * root run-parts /etc/cron.daily
    22 4 * * 0 root run-parts /etc/cron.weekly
    42 4 1 * * root run-parts /etc/cron.monthly
    00,05,10,15,20,25,30,35,40,45,50,55 * * * * webadmin /usr/bin/php /home/webadmin/www/xml/robot_list.php > /home/webadmin/www/xml/sortiecontrol.txt
    10 0 1 1,4,7,10 * root /usr/bin/php /home/webadmin/www/xml/robot_fab.php > /dev/null
    @reboot gem /bin/sh /home/gem/bin/gemrun1 > /dev/null
    Hormis le fichier /var/log/cron, est ce qu'il y en a d'autre qui nous montre les traces d'execution des taches cron?
    Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2006
    Messages : 102
    Par défaut
    Citation Envoyé par Stumi Voir le message
    Bonjour,
    Je réalise un site sur RHEL4ES, et j'ai un problème de crontab. En faite j'ai besoin d'utiliser crontab pour appeller un script PHP toutes les 5 minutes (tous les jours/mois/ans). Ce script est sensé alimenter un fichier xml qui me servira plus tard à afficher les informations sur le site et donc qu'il s'auto update.
    Depuis un petit moment j'ai l'impression que le crontab ne marche plus. En effet, si je ne touche pas au script, il n'y a pas de mise à jour des infos. Lorsque j'execute mon script PHP à la main tout marche bien, les infos sont bien mise à jour.Le truc qui est bizarre c'est que dans les logs de cron tab j'ai bien la trace de l'execution du script, pas de message d'erreur specifique. Tout porte à croire que la tache planifiée s'execute correctement et pourtant non.
    J'ai eu beau rebooter le service crontab, apache, ou encore la machine elle même, rien ne change.
    Voici mon fichier /etc/crontab :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin:/opt/jre1.5.0_11/bin:/opt/IBM/db2/V8.1/lib:/opt/IBM/db2/V8.1/bin
    LD_LIBRARY_PATH=/opt/IBM/db2/V8.1/lib
    DB2INSTANCE=db2inst1
    MAILTO=root
    HOME=/
     
    # run-parts
    01 * * * * root run-parts /etc/cron.hourly
    02 4 * * * root run-parts /etc/cron.daily
    22 4 * * 0 root run-parts /etc/cron.weekly
    42 4 1 * * root run-parts /etc/cron.monthly
    00,05,10,15,20,25,30,35,40,45,50,55 * * * * webadmin /usr/bin/php /home/webadmin/www/xml/robot_list.php > /home/webadmin/www/xml/sortiecontrol.txt
    10 0 1 1,4,7,10 * root /usr/bin/php /home/webadmin/www/xml/robot_fab.php > /dev/null
    @reboot gem /bin/sh /home/gem/bin/gemrun1 > /dev/null
    Hormis le fichier /var/log/cron, est ce qu'il y en a d'autre qui nous montre les traces d'execution des taches cron?
    Merci
    Difficile de t'aider. Il n'existe pas qu'un seul démon cron, et apparement on utilise pas le même .
    Donc première question, c'est: qu'est-ce que tu utilises comme démon ? Ensuite, pour dire chaque 5 min, tu peux faire un truc plus propre genre /12 dans le champ des heures (à vérifier la syntaxe correcte quand même).

    Le fichier /var/log/cron est un bon point de départ, tu peux trouver des infos ailleurs, tout dépend comment tu as configurer ton syslog. Par exemple dans /var/log/messages.

    Si tu rebootes le service, est-ce que ca fonctionne ?

    +

  3. #3
    Invité
    Invité(e)
    Par défaut
    Salut,
    Pourrais-tu rediriger les messages d'erreur vers ton fichier txt.

    De cette manière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    00,05,10,15,20,25,30,35,40,45,50,55 * * * * webadmin /usr/bin/php /home/webadmin/www/xml/robot_list.php > /home/webadmin/www/xml/sortiecontrol.txt 2>&1
    ainsi tu pourras également voir les éventuelles erreurs apparaître.

    Je voulais également savoir pkoi on peut mettre le chemin de l'interpréteur php dans la ligne de la table :
    Dans ton cas, ce n'est pas nécessaire vu que tu as défini /usr/bin dans le PATH de la crontab.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    PATH=/sbin:/bin:/usr/sbin:/usr/bin:/opt/jre1.5.0_11/bin:/opt/IBM/db2/V8.1/lib:/opt/IBM/db2/V8.1/bin
    Mais bon, il est toujours préférable de donner les chemins complets au cas où tu aurais oublié de définir un chemin dans ton PATH

  4. #4
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 15
    Par défaut
    Alors déjà je peux t'informer que c'est le démon crond.
    En ce qui concerne le fichier /var/log/messages, il y a bien des info sur l'execution de crond.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    session opened for user webadmin by (uid=0)
    session opened for user root by (uid=0)
    session closed for user root 
    session closed for user webadmin
    Ce qui est bizarre c'est que quand je fais : crontab -l -u webadmin, il me dit qu'il y a n'y aucune taches enregistrés pour cet utilisateur, donc je comprend pas trop pkoi la session s'ouvre pour cet utilisateur :s.
    Sinon j'ai testé de rebooter le service a plusieurs reprise mais ça n'a rien changé.
    Hier soir je me suis documenté sur l'execution des script php avec des taches cron, et il s'avère que pour des script php il faut rajouter les instructions dans le script pour que l'interpréteur soit trouvé.
    Dans mon script j'ai donc rajouté la ligne "#/usr/bin/php"
    Mais ça n'a pas vraiment l'air de faire beaucoup d'effet.
    Je voulais également savoir pkoi on peut mettre le chemin de l'interpréteur php dans la ligne de la table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    00,05,10,15,20,25,30,35,40,45,50,55 * * * * webadmin /usr/bin/php /home/webadmin/www/xml/robot_list.php > /home/webadmin/www/xml/sortiecontrol.txt
    Pour ce qui est de la récurrence , j'ai remplacé le champ correspondant aux minutes par "*/5" (ce qui est un peu plus propre).

  5. #5
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 15
    Par défaut
    J'ai redirigé la sortie d'erreur comme tu me l'avais dit, et j'ai des problème avec mon script quand il fait le connect avec la base odbc. Enfin ce qui est bizarre, c'est qu'il me sort des erreurs quand je lance la commande a la main et non pas par le crontab.
    Ensuite comment peut on connaitre le chemin de l'interpréteur, sachant qu'en faisant le whereis et le apropos de php, il me sort :
    /usr/bin/php, /usr/local/bin/php, ainsi que le chemin du php.ini et les lib.
    De toute facon j'ai mis les deux premiers chemins dans le path du crontab.
    Au final ne serait-il pas plus judicieux d'abandonner ce crontab, mais plutôt de passer par une tache chronique en PHP???

  6. #6
    Invité
    Invité(e)
    Par défaut
    Salut,

    tu n'as eu aucune erreur dans le fichier txt via la crontab?


    tu as la commande which qui te permet d'indiquer le php que te utilises mais je vois que tu en as deux? même version?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $ /usr/bin/php -v
    $/usr/local/bin/php -v
    $ rpm -qa | grep php

  7. #7
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 15
    Par défaut
    En faite, je n'ai aucune erreur d'afficher quand l'execution est lancée par le crontab. En revanche si je lance la commande à la main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    php -f robot_list.php > sortiecontrol.txt 2> sortiecontrol.txt
    là il me sort des erreur de connexion à la base DB2.
    En faite je me rappel d'un petit problème au sujet de php.
    A l'origine j'avais php 4.3.9, avec un driver ODBC pour faire marcher PHP avec une base DB2.
    Le truc c'est qu'on m'a demandé de passer a la version 5 de PHP, et j'ai pas encore eu le temps de trouver le driver associé pour DB2. Du coup j'ai un PHP4.3.9 et un PHP5.2.6 (mais qui ne peut pas encore fonctionner avec mon site).
    La trace d'execution de la crontab m'informe qu'il a utilisé la version 4.3.9 (donc exactement ce que je voulais).
    Quand je liste les rpm installé je vois que PHP4.3.9 y est toujours.
    Par ailleurs les version sont les suivantes :
    /usr/bin/php -> PHP4.3.9
    /usr/local/bin/php -> PHP5.2.6
    A priori suite aux dernieres modif du crontab, cette fois le script a bien était exécuté mais en revanche il n'a pas pu se connecter aux bases de données :s
    Y a encore un truc qui me chiffone, c'est que la commande : crontab -e ; et le fichier /etc/crontab ne sont pas concordant ....
    Est ce que je me trompe de fichier pour le crontab?
    Merci pour toutes ces réponses

  8. #8
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 15
    Par défaut
    Je commence à avancer petit à petit...
    Comme je l'avais prévu y a bien un problème de driver ODBC pour que PHP puisse communiquer avec une BDD DB2. Ainsi pour la commande suivante j'ai le résultat correspondant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    /usr/bin/php -f ./xml/robot_list.php 2> sortiecontrol.txt
    PHP Warning:  Unknown(): Unable to load dynamic library '/usr/lib/php4/php_ibm_db2.dll' - /usr/lib/php4/php_ibm_db2.dll: cannot open shared object file: No such file or directory in Unknown on line 0
    PHP Warning:  odbc_connect(): SQL error: [unixODBC][IBM][CLI Driver] SQL1060N  User "WEBADMIN" does not have the CONNECT privilege.  SQLSTATE=08004
    Par ailleurs mon fichier /etc/crontab ressemble maintenant à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/bin/php:/opt/jre1.5.0_11/bin:/opt/IBM/db2/V8.1/lib:/opt/IBM/db2/V8.1/bin
    LD_LIBRARY_PATH=/opt/IBM/db2/V8.1/lib
    DB2INSTANCE=db2inst1
    MAILTO=root
    HOME=/
    # run-parts
    01 * * * * root run-parts /etc/cron.hourly
    02 4 * * * root run-parts /etc/cron.daily
    22 4 * * 0 root run-parts /etc/cron.weekly
    42 4 1 * * root run-parts /etc/cron.monthly
    */5 * * * * webadmin /usr/bin/php -f /home/webadmin/www/xml/robot_list.php > /home/webadmin/www/xml/sortiecontrol.txt 2> /home/webadmin/www/xml/sortiecontrol.txt
    10 0 1 1,4,7,10 * root /usr/bin/php /home/webadmin/www/xml/robot_fab.php > /dev/null
    @reboot gem /bin/sh /home/gem/bin/gemrun1 > /dev/null
    Y a cependant une question que je me pose, est ce que dans mon fichier crontab je fais executer le script par webadmin ou par root???
    Ca me paraitrais plus logique que ce soit webadmin que root.

  9. #9
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 15
    Par défaut
    C'est tout bon!!!!
    En faite y avait plusieurs petites erreurs, notamment le fait qu'il fallait l'executer en tant qu'utilisateur db2inst1 et non pas webadmin ni root
    Par ailleurs, au lieu de mettre en en tete du script PHP "#/usr/bin/php", j'ai préféré le mettre dans la commande du crontab
    ce qui donne au final :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    */5 * * * * db2inst1 /usr/bin/php -f /home/webadmin/www/xml/robot_list.php > /home/webadmin/www/xml/sortiecontrol.txt 2> /home/webadmin/www/xml/sortiecontrol.txt
    En revanche j'ai toujours un warning m'indiquant qu'il me manque le dll liant php à DB2 .... Mais apparement ça n'empeche pas le script de récupérer les données de la base.
    En tout cas merci à tous pour votre aide

  10. #10
    Invité
    Invité(e)
    Par défaut
    Re,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    */5 * * * * webadmin /usr/bin/php -f /home/webadmin/www/xml/robot_list.php > /home/webadmin/www/xml/sortiecontrol.txt 2> /home/webadmin/www/xml/sortiecontrol.txt
    Le script qui est executé toutes les 5 minutes en tant que webadmin tandis que le deuxième juste en dessous est executé en tant que root.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PHP Warning:  Unknown(): Unable to load dynamic library '/usr/lib/php4/php_ibm_db2.dll' - /usr/lib/php4/php_ibm_db2.dll: cannot open shared object file: No such file or directory in Unknown on line 0
    Il essaie de trouver une dll sour linux? tu devrais avoir un php_ibm_db2.so
    Quoiqu'il en soit. une librairie est manquante. Peux-être qu'elle est ailleurs.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    12
     
    find / -name "php_ibm_db2*" -type f
    Pour voir si une librairie de ce genre existe sur ton système. PHP Warning: odbc_connect(): SQL error: [unixODBC][IBM][CLI Driver] SQL1060N User "WEBADMIN" does not have the CONNECT privilege. SQLSTATE=08004
    Le second message indique que le user webadmin n'a pas les droits pour se connecter au serveur db2.

    Pourrait-on avoir un aperçu de ton script??
    Dernière modification par Invité ; 06/08/2008 à 14h49.

  11. #11
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 15
    Par défaut
    J'ai recherché le fichier par la commande find comme tu me l'avais recommandé et voila ce que ça me répond ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    /home/webadmin/rpm_W2/ibm_db2-1.6.6/php_ibm_db2.h
    /home/webadmin/rpm_W2/php-5.2.6/php_ibm_db2.h
    Donc voila il me trouve les rpm que j'avais stocké dans un dossier. Le truc c'est que je les ai déjà installé ces rpm mais apparemment j'ai du les planter par la suite ...
    Ce qui est quand même très bizarre , c'est qu'il me manque une lib pour pouvoir me connecter la base DB2 , et pourtant mon script marche bien ..
    Depuis que j'ai changé l'user (webadmin -> db2inst1) qui lance le crontab, plus de pb de privilège biensur, mais en plus ça se connecte bien .. j'ai plus aucun problème sur le odbc_connect().
    Pour ce qui est du deuxieme script, c'est un script très long (2h), et la je suis en train de le tester en le lancant en tant que root à la main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /usr/bin/php -f robot_fab.php
    Pour l'instant tout se passe très bien, les info sont récupérés.
    Pour ce qui est du script, je te montre juste la partie qui bloquait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    set_time_limit(0);
    $conn = odbc_connect($database,'login','pwd',SQL_CUR_USE_DRIVER);
    	$query = "select * from table(gem.floorstatus()) as status where testcell is not null order by testcell"; 
    	$result = odbc_exec($conn, $query);
     
    	global $array_testcell, $array_machtype, $array_machmod, $array_machser, $array_opnum, $array_title, $array_opmode, $array_opstatus, $array_ordernum, $array_processlevel, $array_opnumfails, $array_lastgoodop, $array_lastgoodtime, $array_statustime, $array_starttime, $array_process_time, $array_process_rem;
    	while(odbc_fetch_row($result)){
    		if (odbc_result($result,1)!=''){array_push($array_testcell,odbc_result($result,1));}else{array_push($array_testcell,'null');}
    		if (odbc_result($result,2)!=''){array_push($array_machtype,odbc_result($result,2));}else{array_push($array_machtype,'null');}
    		if (odbc_result($result,3)!=''){array_push($array_machmod,odbc_result($result,3));}else{array_push($array_machmod,'null');}
    }
    odbc_close($conn);
    De toute facon je ne pense pas qu'il y ai de bugs dans le script, j'ai toujours eu aucun problème avec ce code, même en l'appellant par le navigateur.
    Pour en revenir à la lib qui pose problème, je me sens pas trop de toucher aux rpm pour réinstaller la lib. J'essaie de trouver le fichier "/usr/lib/php4/php_ibm_db2.dll sur le net mais y a que des tutos.

  12. #12
    Invité
    Invité(e)
    Par défaut
    Ok sinon tu peux toujours compiler le module db2 pour php.

    tu as une doc la dessus:
    http://www.db2ude.com/?q=node/81

Discussions similaires

  1. Problème /etc/crontab ne fonctionne plus
    Par kazylax dans le forum Linux
    Réponses: 1
    Dernier message: 05/08/2009, 13h20
  2. Problème avec crontab
    Par djniklos dans le forum Linux
    Réponses: 3
    Dernier message: 08/03/2009, 11h39
  3. [DEV] problème avec crontab
    Par kaele dans le forum Apple
    Réponses: 0
    Dernier message: 15/12/2008, 13h02
  4. problème avec crontab
    Par polace dans le forum Administration système
    Réponses: 3
    Dernier message: 04/11/2007, 00h40
  5. Problème avec CRONTAB
    Par arnaudperfect dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 03/08/2007, 16h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo