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 :

script sur crontab ne marche pas


Sujet :

Linux

  1. #1
    Nouveau membre du Club
    jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
    Inscrit en
    Septembre 2010
    Messages
    74
    Détails du profil
    Informations professionnelles :
    Activité : jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2010
    Messages : 74
    Points : 36
    Points
    36
    Par défaut script sur crontab ne marche pas
    bonjour,

    je fais un script dans le fichier fichier.sh sur unix, quand je fais excuter fichier.sh manuellement, il marche très bien. Mais quand je le fais mon crontab, il n'est pas exécuté ( il ne marche pas ).

    sincères remerciments
    lastmagik

  2. #2
    Membre averti Avatar de fransoo
    Inscrit en
    Novembre 2009
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 209
    Points : 300
    Points
    300
    Par défaut
    C'est sûrement dû au fait que crontab ne lance pas les scripts dans le même environnement que celui de l'utilisateur.
    • Voir le manuel de crontab (man crontab).
    • Un aperçu du script permettrait de mettre le doigt sur ce qui cloche.

  3. #3
    Nouveau membre du Club
    jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
    Inscrit en
    Septembre 2010
    Messages
    74
    Détails du profil
    Informations professionnelles :
    Activité : jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2010
    Messages : 74
    Points : 36
    Points
    36
    Par défaut suite
    bonjour fransoo,

    ci-dessous le le script, dans fichier.sh

    file1=`ls -ltr | awk -F" " '{print $9}' | tail -1`

    grep "AB" $file1 >> file2

    exit

    et ci dessous le crontab

    58 * * * * /osp/psmf/hds/apache/logs/ttin_test.sh

    beaucoup de mercis
    lastmagik

  4. #4
    Nouveau membre du Club
    jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
    Inscrit en
    Septembre 2010
    Messages
    74
    Détails du profil
    Informations professionnelles :
    Activité : jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2010
    Messages : 74
    Points : 36
    Points
    36
    Par défaut
    et ci dessous le vraie crontab

    58 * * * * /osp/psmf/hds/apache/logs/fichier.sh

    merci bcp
    lastmagik

  5. #5
    Membre averti Avatar de fransoo
    Inscrit en
    Novembre 2009
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 209
    Points : 300
    Points
    300
    Par défaut
    Citation Envoyé par lastmagik Voir le message
    bonjour fransoo,
    ci-dessous le le script, dans fichier.sh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    file1=`ls -ltr | awk -F" " '{print $9}' | tail -1`
    grep "AB" $file1  >> file2
    exit
    C'est plus lisible avec les 'code tags' (#)
    j'ajouterais un "cd /osp/psmf/hds/apache/logs" (si c'est bien là qu'on doit faire le 'ls' et que se trouve "file2") au début pour assurer le coup.
    Il faudrait chercher un "file2" dans le répertoire personnel (/home/<user>) car je crois que c'est là qu'on a des chances de le trouver...

  6. #6
    Nouveau membre du Club
    jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
    Inscrit en
    Septembre 2010
    Messages
    74
    Détails du profil
    Informations professionnelles :
    Activité : jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2010
    Messages : 74
    Points : 36
    Points
    36
    Par défaut suite
    bonjour fransoo,

    au début de mon script j'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cd /osp/psmf/hds/apache/logs
    et le script marche bien mais dans le cript il rencontre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if [ $vZebra2 -ne 0 ] 
    then
      ...     .....
     
    else 
     
     ...     .....    
     
    fi
    il n'éxécute pas cette condition ! ?? pourtant manuellement le script marche correctement

    merci beaucoup
    lastmagik

  7. #7
    Membre averti Avatar de fransoo
    Inscrit en
    Novembre 2009
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 209
    Points : 300
    Points
    300
    Par défaut
    Et d'où vient ce $vZebra2 ?

  8. #8
    Nouveau membre du Club
    jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
    Inscrit en
    Septembre 2010
    Messages
    74
    Détails du profil
    Informations professionnelles :
    Activité : jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2010
    Messages : 74
    Points : 36
    Points
    36
    Par défaut suite
    bonjour fransoo,

    j'ai un code fichier.sh qui s'éxécute bien manuellement mais il ne s'execute pas correctement avec crontab.
    Suite à ton conseil j'ai fait au début de mon code
    cd /osp/psmf/hds/apache/logs
    alors maintenant dans mon crontab le code mache très bien.
    Mais le probleme c'est que quand il rencontre mon instruction de condition if il s'arrête.
    let vZebra2=`wc -l fileZebra2 | awk -F" " '{print $1}'`

    if [ $vZebra2 -ne 0 ]
    then
    ... .....

    else

    ... .....

    fi
    je ne comprend pas pourquoi manuellement çà marche, mais avec crontab çà marche aussi mais quand il rencontre mon instruction de condition if il s'arrête ?

    merci beaucoup
    lastmagik

  9. #9
    Membre averti Avatar de fransoo
    Inscrit en
    Novembre 2009
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 209
    Points : 300
    Points
    300
    Par défaut
    Citation Envoyé par lastmagik Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    let vZebra2=`wc -l fileZebra2 | awk -F" " '{print $1}'`
    Pourrait avantageusement être remplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vZebra2=$(wc -l <fileZebra2)
    Ce qui évite un appel à awk (qui n'est sûrement pas dans le PATH quand le script est lancé par cron).

    Accessoirementpeut s'écrire avec l'évaluation arithmétique:

  10. #10
    Nouveau membre du Club
    jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
    Inscrit en
    Septembre 2010
    Messages
    74
    Détails du profil
    Informations professionnelles :
    Activité : jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2010
    Messages : 74
    Points : 36
    Points
    36
    Par défaut suite
    Pour mes futurs codes j'ai besoin de utiliser awk
    Que dois je faire dans mon code ci-dessous pour que crontab retrouve le chemin avec awk

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    let vZebra2=`wc -l /osp/psmf/hds/apache/logs/fileZebra2 | awk -F" " '{print $1}'`
    est ce que cette forme d expression ci-dessous n est pas compatible avec crontab

    sincères remerciments
    lastmagik

  11. #11
    Membre averti Avatar de fransoo
    Inscrit en
    Novembre 2009
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 209
    Points : 300
    Points
    300
    Par défaut
    Citation Envoyé par lastmagik Voir le message
    Pour mes futurs codes j'ai besoin de utiliser awk
    Que dois je faire dans mon code ci-dessous pour que crontab retrouve le chemin avec awk
    Lui doner le chemin complet de awk ( qu'on peut obtenir avec la commande 'which awk')
    Mais dans l'expression en question j'éviterais cette complication.
    Citation Envoyé par lastmagik Voir le message
    est ce que cette forme d expression ci-dessous n est pas compatible avec crontab
    Si, si, pas de problème

  12. #12
    Nouveau membre du Club
    jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
    Inscrit en
    Septembre 2010
    Messages
    74
    Détails du profil
    Informations professionnelles :
    Activité : jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2010
    Messages : 74
    Points : 36
    Points
    36
    Par défaut suite
    il n 'a pas marché avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vZebra2=$(wc -l <fileZebra2)
    il n'a pas marché avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    let vZebra2=`awk -F" " '{print $1}' /osp/psmf/hds/apache/logs/fileZebra3`
    c 'est important de faire which awk pouras tu me monter comment on fait
    which awk ..... ??
    sincères remerciments
    lastmagik

  13. #13
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 119
    Points
    28 119
    Par défaut
    Bonjour,

    Dans un script lance en crontab, toutes les commandes doivent etre appelees via leur chemin absolu. C'est a dire que tu ne dois pas avoir 'ls', mais '/usr/bin/ls'.

    La commande which, suivie d'une autre commande, te permet de savoir quel est le chemin absolu vers cette seconde commande. Ainsi, 'which ls' te retournera '/usr/bin/ls'.

    Montre-nous tout le script que tu appelles, ca sera plus simple pour t'aider.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  14. #14
    Nouveau membre du Club
    jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
    Inscrit en
    Septembre 2010
    Messages
    74
    Détails du profil
    Informations professionnelles :
    Activité : jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2010
    Messages : 74
    Points : 36
    Points
    36
    Par défaut suite
    bonjour gangsoleil et fransoo,

    ps : alors que excuter manuellement le tout marche correctement.
    Mais avec crontab je pense que c'est son awk qui ne marche pas

    merci de trouver ci-dessous le code que j'ai fait

    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
    18
    19
    20
    21
    22
    23
    cd /osp/psmf/hds/apache/logs
     
    fileZebra1=`ls -ltr | awk -F" " '{print $9}' | tail -1`
     
    vZebra1=`date | awk -F" " '{print $3$2$6}'`
     
    grep $vZebra1 $fileZebra1 | awk -F" " '{if ($6>0) print $0}' > /osp/psmf/hds/apache/logs/fileZebra2
     
    wc -l /osp/psmf/hds/apache/logs/fileZebra2 > /osp/psmf/hds/apache/logs/fileZebra3
     
    let vZebra2=`/usr/xpg4/bin/awk -F" " '{print $1}' /osp/psmf/hds/apache/logs/fileZebra3`
     
    # ici awk n'a pas marché, alors il n y a pas de valeur dans $vZebra2 
     
    echo $vZebra1 > /osp/psmf/hds/apache/logs/txt.jmi
     
    echo $vZebra2 >> /osp/psmf/hds/apache/logs/txt.jmi
     
    # dans txt.jmi la valeur de $vZebra2 ne se trouve pas dans txt.jmi
     
    echo "test" >> txt.jmi
     
    exit
    sincères remerciments
    lastmagik

  15. #15
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 119
    Points
    28 119
    Par défaut
    Bonjour,

    Essaye de remplacer tous les appels a ls, grep, tail, wc, awk ... par des appels avec le chemin absolu, comme conseille precedemment. Ca devrait deja pas mal aider.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  16. #16
    Nouveau membre du Club
    jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
    Inscrit en
    Septembre 2010
    Messages
    74
    Détails du profil
    Informations professionnelles :
    Activité : jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2010
    Messages : 74
    Points : 36
    Points
    36
    Par défaut suite
    bonjour gangsoleil,

    ps : je suis sur unix

    avec :
    which echo
    /usr/bin/echo
    which grep
    /usr/xpg4/bin/grep

    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
    18
    19
    20
    21
    22
    23
    /usr/xpg4/bin/cd /osp/psmf/hds/apache/logs
     
    fileZebra1=`/usr/xpg4/bin/ls -ltr | usr/xpg4/bin/awk -F" " '{print $9}' | usr/xpg4/bin/tail -1`
     
    vZebra1=`usr/xpg4/bin/date | usr/xpg4/bin/awk -F" " '{print $3$2$6}'`
     
    usr/xpg4/bin/grep $vZebra1 $fileZebra1 | usr/xpg4/bin/awk -F" " '{if ($6>0) print $0}' > /osp/psmf/hds/apache/logs/fileZebra2
     
    /usr/bin/wc -l /osp/psmf/hds/apache/logs/fileZebra2 > /osp/psmf/hds/apache/logs/fileZebra3
     
    let vZebra2=`/usr/xpg4/bin/awk -F" " '{print $1}' /osp/psmf/hds/apache/logs/fileZebra3`
     
    # c est toujours ici awk n'a pas marché, alors il n y a pas de valeur dans $vZebra2 
     
    /usr/bin/echo $vZebra1 > /osp/psmf/hds/apache/logs/txt.jmi
     
    /usr/bin/echo $vZebra2 >> /osp/psmf/hds/apache/logs/txt.jmi
     
    # dans txt.jmi la valeur de $vZebra2 ne se trouve pas dans txt.jmi
     
    /usr/bin/echo "test" >> txt.jmi
     
    exit
    ne marche pas sur crontab
    la valeur de $vZebra2 n'est pas dans le fichier txt.jmi

    mais manuellement çà marche !!

    sincères remerciments
    lastmagik

  17. #17
    Nouveau membre du Club
    jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
    Inscrit en
    Septembre 2010
    Messages
    74
    Détails du profil
    Informations professionnelles :
    Activité : jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2010
    Messages : 74
    Points : 36
    Points
    36
    Par défaut suite
    bonjour fransoo et gangsoleil,

    j'ai suivi les conseils de fransoo mentionnés un peu plus haut de cette discussion.

    maintenant tout marche bien.

    merci beaucoup à fransoo et gangsoleil

    sincères remerciments
    lastmagik

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

Discussions similaires

  1. requete marche sur le serveur marche pas sur le site
    Par ben_skywalker dans le forum Requêtes
    Réponses: 5
    Dernier message: 08/12/2008, 12h07
  2. FileDialog filtre sur les extensions marche pas
    Par *alexandre* dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 22/08/2007, 12h49
  3. Autofit sur des lignes marche pas
    Par coco21 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 10/07/2007, 15h35
  4. Clic droit sur eclipse ne marche pas
    Par rnan dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 29/05/2007, 16h26
  5. Page de login -- script PHP qui ne marche pas
    Par Alexlesilex dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 24/04/2006, 16h32

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