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

Administration système Discussion :

[CRON] Timeout lors de l'execution?


Sujet :

Administration système

  1. #1
    Membre habitué
    Inscrit en
    Novembre 2005
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 240
    Points : 145
    Points
    145
    Par défaut [CRON] Timeout lors de l'execution?
    Bonjour

    Quand on lance un script via cron, existe-t-il un timeout particulier qui arrête l'exécution du script? Je m'explique.

    j'ai un script sh qui lance successivement 2 programmes Java. Le premier peut mettre + de 4h de traitements. (je sais c'est beaucoup mais je peux pas faire autrement). le script se présente comme ç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
     
    cd /home/monrepertoire
    echo "[SH] Re initialisation de la console">>console
    rm -Rf console
    #lancement1
    echo "[SH] lancement1">>console
    java -Xmx1024M -jar execution1.jar>>console
    #celui qui dure plus de 4h
     
    #lancement2
    echo "[SH] Lancement2">>console
    java -jar -Xmx1024M -jar lancement2.jar>>console
    #celui la dure quelques secondes
    echo "[SH]END OF SCRIPT reportgenerator.sh">>console
    Quand je le lance manuellement, dans les même conditions que cron (même utilisateur par exemple) tout se passe bien.

    Cron lance le script à la bonne heure, execute bien le premier programme mais ne lance jamais le second (je ne vois même pas la "[SH] lancement2" dans le fichier console, ni celui d'après).

    Alors je me dis que :
    -soit au bout d'un certains temps cron arrête lui même le script (mais pas l'execution java) pensant que le script ne reponds plus
    -soit il n'exécute pas les taches séquentiellement (un peu comme si j'avais mis un & à la fin de la commande) que mon programme2 soit exécuté bien avant la fin du programme. Mais dans ce cas pourquoi je ne vois pas les traces? et pourquoi il ne me fait pas la même chose quand je le lance moi même dans le shell?

    Bref je penche plus pour la première hypothèse et si c'est ça comment résoudre ce problème?

    Merci d'avance

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

    Peux-tu fusionner l'erreur standard avec l'output standard afin de voir les éventuelles erreurs?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    java -jar -Xmx1024M -jar lancement2.jar>>console 2>&1

  3. #3
    Membre habitué
    Inscrit en
    Novembre 2005
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 240
    Points : 145
    Points
    145
    Par défaut
    Citation Envoyé par Mygale1978 Voir le message
    Salut,

    Peux-tu fusionner l'erreur standard avec l'output standard afin de voir les éventuelles erreurs?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    java -jar -Xmx1024M -jar lancement2.jar>>console 2>&1
    Merci pour la réponse. je vais changer le script mais compte tenu du temps d'execution je n'aurais de réponse que demain. Pour aller un peu plus vite cette sortie d'erreur je ne peux pas la lire ailleurs? par défaut cela se situe où ça?

    je suis sur un serveur ubuntu hardy. merci

    EDIT: je me pose un petite question comme ça. Si il y avait une erreur au lancement de lancement2.jar, je devrais voir le message "[SH] lancement2" non?

  4. #4
    Membre habitué
    Inscrit en
    Novembre 2005
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 240
    Points : 145
    Points
    145
    Par défaut
    Petit bilan de l'execution d'hier soir.

    comme log de script ne ne vois que
    et rien d'autre ni erreur ni rien du tout! simplement la fin du premier programme java.

    Je reste donc sur mon hypothèse :
    -cron lance mon script en donnant un PID.
    -le programme java se lance avec un autre PID.
    -Voyant qu'au bout d'un certains temps le script ne bouge pas (vu que le programme java dure 4h!!!), cron croit que le script ne réponds plus et donc arrête l'execution. Une fois le programme java terminé, on ne peut plus lancer la suite du script.

    Donc existe-t-il un moyen de paramétrer ceci? ou puis je voir les logs de cron afin de voir si mon script s'arrête bien de manière forcée????

    merci d'avance

  5. #5
    Membre averti Avatar de exodev
    Inscrit en
    Septembre 2009
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Septembre 2009
    Messages : 201
    Points : 359
    Points
    359
    Par défaut
    Hello,

    Une autre solution pourrait-être lié au premier lancement qui renverrait un signal de terminaison.

    Rajouter la redirection du flux d'erreurs ( 2>&1 ) pour le premier lancement permettrait peut-être de déceler une erreur de ce côté

  6. #6
    Membre habitué
    Inscrit en
    Novembre 2005
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 240
    Points : 145
    Points
    145
    Par défaut
    Citation Envoyé par exodev Voir le message
    Hello,

    Une autre solution pourrait-être lié au premier lancement qui renverrait un signal de terminaison.

    Rajouter la redirection du flux d'erreurs ( 2>&1 ) pour le premier lancement permettrait peut-être de déceler une erreur de ce côté
    Oups c'est une erreur de ma part de na pas l'avoir mis

    Mais ce que je comprends pas c'est pourquoi, ça marche bien lorsque je lance le même script à la main???

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

    Lorsque tu lances un programme manuellement, tu es dans un shell avec certaines variables d'environnement définies. Par contre, lorsque tu executes ton programmes via crontab, ces variables ne sont pas définies sauf si tu as pris le soin de le faire dans ton script ou dans la crontab.

    Ceci pourrait expliquer la différence de comportement entre l'execution manuelle et l'execution via la crontab.

    Maintenant la seule manière de savoir est d'essayer logguer les erreurs notamment via la méthode qui t'a été demandée précédemment.

    De plus, il serait également intérressant de savoir ce que font tes programmes java (appels a des commandes systèmes?)

  8. #8
    Membre habitué
    Inscrit en
    Novembre 2005
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 240
    Points : 145
    Points
    145
    Par défaut
    Citation Envoyé par Mygale1978 Voir le message
    Salut,

    Lorsque tu lances un programme manuellement, tu es dans un shell avec certaines variables d'environnement définies. Par contre, lorsque tu executes ton programmes via crontab, ces variables ne sont pas définies sauf si tu as pris le soin de le faire dans ton script ou dans la crontab.

    Ceci pourrait expliquer la différence de comportement entre l'execution manuelle et l'execution via la crontab.

    Maintenant la seule manière de savoir est d'essayer logguer les erreurs notamment via la méthode qui t'a été demandée précédemment.

    De plus, il serait également intérressant de savoir ce que font tes programmes java (appels a des commandes systèmes?)
    j'ai changé mon script dès que j'aurais plus de nouvelles je vous les présentrais.

    Mes programmes Java ne font rien de système. C'est assez spécifique donc dur à expliquer mais grosso modo ils vont rechercher des données dans plusieurs bases et les ecrits dans des fichiers. Ca c'est pour le premier programme.

    Le second reprends ces fichiers puis les recopies dans d'autres dossiers.

    C'est la grande masse de données à manipuler qui créer de tels temps d'execution

    En tout cas merci pour les réponses

  9. #9
    Membre habitué
    Inscrit en
    Novembre 2005
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 240
    Points : 145
    Points
    145
    Par défaut
    Bonjour,

    Ca fait un petit moment que je galère avec ça et donc du coup j'ai changé mon fusil d'epaule. Pour commencer j'ai fais refaire le programme java pour qu'il fasse tout en même temps que l'on lance avec une seule commande. Ce programme génère des fichiers sur le disque, après ces fichiers doivent être copiés dans un autre endroit disponible à l'utilisateur. On ne copie pas directement dans la bonne directory, pour eviter des erreurs (si le programme crash en plein milieu ou ce genre de truc).

    Or le phénomène est le même.

    Pour contourner ça, j'ai fait 2 scripts. Le premier contenant l'appel java. Le second s'occupant du transfert de fichier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #On se place dans le repertoire reportgenerator
    echo "[SH] On se place dans le repertoire"
    cd /home/directory/
    echo "[SH] copie des fichiers">>console 2>&1
    cp -Rf files/* files2/
    #vide le repertoire tmp
    echo "[SH] Vide le repertoire files">>console 2>&1
    rm -Rf files/*
    echo "[SH]END OF SCRIPT">>console 2>&1
    Connaissant le temps moyen du programme java je peux programmer le lancement de la seconde tache à une heure dont je suis sur que le programme java est lancé. Cette solution n'est pas encore satisfaisante, mais elle marche à 95%

    Le soucis c'est que j'ai exactement la même chose dans le second script! C'est à dire que si je le lance dans un shell à la main tout se passe super bien par contre si je le lance via cron, seule la première copie se fait, je ne vois même pas les messages 'echo' ni aucune remonté d'erreurs !!!

    Vraiment je suis perdu, j'en suis à me demander s'il n'y a pas un nombre de lignes limites pour les scripts ou ce genre de truc (totalement stupide)...

    Bien entendu, j'ai pensé à des problèmes genre des droits sur les fichiers mais j'ai tout mis en 777, bien entendu c'est lancé à partir de la crontab du même utilisateurs que mon shell etc... et ça n'expliquerais pas l'absence de message...

    Merci pour votre aide

  10. #10
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 589
    Points : 19 470
    Points
    19 470
    Par défaut
    Bonjour,

    Ceci te permettra, j'espère, d'avoir un rapport d'activité de ton script plus efficace
    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
    17
    #!/bin/bash
     
    homeDir="/home/directory"
    fileDir="$homeDir/files"
    log="$homeDir/fichier.log"
     
    # lancement du programme java
    ta_commande_java
    echo "java fini" >> $log
     
    # on ne se déplace pas dans les répertoires !
    # copie des fichiers
    cp -R $fileDir ${fileDir}2 && echo "[SH] fichiers copiés" >> $log || echo "[SH] échec de la copie des fichiers" >> $log
    #vidage le repertoire tmp
    rm -R $fileDir && echo "[SH] répertoire files vidés" >> $log || echo "[SH] échec du vidage de files" >> $log
     
    echo "[SH]END OF SCRIPT" >> $log
    ...
    ?

  11. #11
    Membre habitué
    Inscrit en
    Novembre 2005
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 240
    Points : 145
    Points
    145
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Bonjour,

    Ceci te permettra, j'espère, d'avoir un rapport d'activité de ton script plus efficace
    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
    17
    #!/bin/bash
     
    homeDir="/home/directory"
    fileDir="$homeDir/files"
    log="$homeDir/fichier.log"
     
    # lancement du programme java
    ta_commande_java
    echo "java fini" >> $log
     
    # on ne se déplace pas dans les répertoires !
    # copie des fichiers
    cp -R $fileDir ${fileDir}2 && echo "[SH] fichiers copiés" >> $log || echo "[SH] échec de la copie des fichiers" >> $log
    #vidage le repertoire tmp
    rm -R $fileDir && echo "[SH] répertoire files vidés" >> $log || echo "[SH] échec du vidage de files" >> $log
     
    echo "[SH]END OF SCRIPT" >> $log
    ...
    ?
    Bonjour,

    non seulement le rapport est meilleur mais en plus ça à l'air de marcher !
    je suis encore en cours de test mais ça se présente vraiment très bien, simplement des erreurs de ma part pour l'adressage (genre il supprime le dossier et pas simple son contenu etc...) mais j'ai pu le faire tourner plusieurs fois sans problèmes. Je suis en train de faire un dernier pour être sur mais ça sent vraiment bon...

    Et je te remercie pour le script ça m'a appris quelques trucs (notamment l'utilisation des || et &&, très instructif).

    Par contre je ne comprends toujours pas pourquoi ça ne marcher pas avant (même si c'était très mal codé), peut être le fait d'utiliser bash à la place de sh. A part ça je vois pas. Mais l'essentiel est que ça marche!!!

    Merci beaucoup !!!!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/09/2005, 14h03
  2. Erreur lors de l'execution d'un script jsp
    Par tuxor dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 06/08/2004, 12h35
  3. [ADO] Probleme lors de l'execution d'une requete...
    Par NoisetteProd dans le forum Bases de données
    Réponses: 4
    Dernier message: 04/06/2004, 12h43
  4. erreur "ORA-22905" lors de l'execution d'un requet
    Par benji999 dans le forum Administration
    Réponses: 26
    Dernier message: 14/04/2004, 11h47
  5. [langage] Passage de parametre lors de l execution
    Par WetzlarMan dans le forum Langage
    Réponses: 4
    Dernier message: 16/03/2004, 13h28

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