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

Shell et commandes GNU Discussion :

[Cron] Problème d’exécution de script


Sujet :

Shell et commandes GNU

  1. #21
    Membre averti
    Inscrit en
    Janvier 2011
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 20
    Par défaut
    giedi:/scripts# /usr/bin/env
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SHELL=/bin/sh
    TERM=xterm
    USER=root
    MAIL=/var/mail/root
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    PWD=/scripts
    LANG=fr_FR.UTF-8
    PS1=\h:\w\$
    SHLVL=1
    HOME=/root
    LOGNAME=root
    _=/usr/bin/env
    OLDPWD=/****/*/****/******
    giedi:/scripts# cat /tmp/env_crontab.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SHELL=/bin/sh
    PATH=/usr/bin:/bin
    PWD=/root
    HOME=/root
    SHLVL=2
    LOGNAME=root
    _=/usr/bin/env

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

    La variable MAIL spécifie le chemin vers la boite mail de l'utilisateur. Cette dernière est définie dans le shell de l'utilisateur or dans la crontab, on voit que cette variable n'existe pas.

    Ceci pourrait expliquer la raison pour laquelle ça fonctionne lorsque tu executes le script manuellement et non dans la crontab.

    Pourrais-tu éditer à nouveau ta crontab et ajouter la variable d'environnement MAIL stp? On verra ainsi si la boite mail de root est retrouvée.

    Contenu de la crontab:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    MAIL=/var/mail/root
    */1 * * * * /scripts/Test_Disque.sh

  3. #23
    Membre averti
    Inscrit en
    Janvier 2011
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 20
    Par défaut
    Toujours le même problème =/

  4. #24
    Membre averti
    Inscrit en
    Janvier 2011
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 20
    Par défaut
    Si ça peut aider, le serveur où s’exécute le script est un serveur de messagerie Cyrus/Postfix

  5. #25
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2009
    Messages : 196
    Par défaut
    Quand tu as utilisé l'option -u de mail tu n'as plus eu d'erreur dans syslog. As tu retrouvé ce mail sous postfix (ou erreur dans ses log) ?

    https://help.ubuntu.com/community/Cyrus

    avec l'option -u cela marche-t-il quand tu lance le script directement depuis ta session ? si non ... utiliser un autre compte.

    Sinon ... il reste le jeux des 7 erreurs entre tes cron qui marchent et celui qui ne marche pas

  6. #26
    Membre averti
    Inscrit en
    Janvier 2011
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 20
    Par défaut
    Quand tu as utilisé l'option -u de mail tu n'as plus eu d'erreur dans syslog. As tu retrouvé ce mail sous postfix (ou erreur dans ses log) ?
    Nop

    avec l'option -u cela marche-t-il quand tu lance le script directement depuis ta session ? si non ... utiliser un autre compte.
    J'ai n'ai que le compte root sur ce serveur =/

    Sinon ... il reste le jeux des 7 erreurs entre tes cron qui marchent et celui qui ne marche pas
    Je l'ai déjà fait hier mais je vais le refaire je ne vois que ça, je vais aussi réécrire le script ligne par ligne on ne sais jamais ...

  7. #27
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2009
    Messages : 196
    Par défaut
    Citation Envoyé par Johan_A Voir le message
    Citation:
    Quand tu as utilisé l'option -u de mail tu n'as plus eu d'erreur dans syslog. As tu retrouvé ce mail sous postfix (ou erreur dans ses log) ?
    Nop.
    Cela ne t'inquiète-t-il pas plus que cela ? Auriez-vous installé une sorte de trou noir sur ce système ?

    https://help.ubuntu.com/community/Cyrus

  8. #28
    Membre averti
    Inscrit en
    Janvier 2011
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 20
    Par défaut
    En fait les mails que le Cron envoi sont les mails d'erreurs et il les envoyait par défaut à une boite inexistante. J'ai donc rajouté

    MAILTO=monadress@mondomaine.fr
    Et maintenant je sais quel est le problème du script :

    /scripts/Test_Disque2.sh: line 18: [: -gt: unary operator expected
    /scripts/Test_Disque2.sh: line 18: [: -gt: unary operator expected
    /scripts/Test_Disque2.sh: line 18: [: -gt: unary operator expected
    C'est donc la ligne liée au à la comparaison de valeur qui pose problème :

    if [ $p_utilise2 -gt $seuil ]
    Je pensais avoir trouvé un élément de réponse ici (1er commentaire)

    http://www.cyberciti.biz/tips/shell-...isk-space.html

    Cependant en mettant df -hP au lieu de df -h le problème est toujours la.

  9. #29
    Membre averti
    Inscrit en
    Janvier 2011
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 20
    Par défaut
    Je n'ai plus de mail d'erreur en mettant des double [[ ]]

    if [[ $p_utilise2 -gt $seuil ]]
    Mais je ne reçoit pas le m'ail d'alerte ....

  10. #30
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2009
    Messages : 196
    Par défaut
    Comme quoi ça valait la peine de se poser la question de "oucéty qu'il est donc le mail ?".

    Pour les [[ ]] ... je ne vois pas pourquoi ça aurait changé quelque chose ... par contre ta valeur a du changer (surtout si tu as modifié son affectation). peux tu reposter le code ?

  11. #31
    Membre averti
    Inscrit en
    Janvier 2011
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 20
    Par défaut
    C'est le même que le premier message.

    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
     
    seuil=90
     
    for partition in /dev/sda1 /dev/sda2 /dev/sda3
    do
    	df=`df -h $partition`
    	p_utilise=`echo $df | cut -f14 -d ' '`
    	p_utilise2=${p_utilise:0:2}
    	if [[ $p_utilise2 -gt $seuil ]]
    	then
    		t_partition=`echo $df | cut -f11 -d ' '`
    		e_utilise=`echo $df | cut -f12 -d ' '`
    		e_restant=`echo $df | cut -f13 -d ' '`
    		corps="Bonjour,\n\nL'espace disque actuellement disponible sur la partition $partition a dépassé le seuil d'alerte de $seuil %.\n\nTaille de la partition : $t_partition\nEspace utilisé : $e_utilise\nEspace restant : $e_restant\n\nCordialement,\n--\n*****"
    		echo -e $corps | mail -s "Alerte : Espace disque" -a "From: *****<*****@*******.fr>" admin@********.fr
    	fi
    done
    Par contre en testant les valeurs p_utilise2 est maintenant vide et donc le script ne rentre pas dans le if =/ (tout comme p_utilise)

  12. #32
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2009
    Messages : 196
    Par défaut
    arg ... j'avais pas analysé ho combien c'est casse gueule ton système !!!
    Pas bon les cut ... surtout sur deux lignes

  13. #33
    Membre averti
    Inscrit en
    Janvier 2011
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 20
    Par défaut
    C'est de la que viens le problème oui.

    Pourquoi ce n'est pas bien ? Par quoi puis-je le remplacer ? (edit : la réponse est dans mon précédent lien)

  14. #34
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ A=$(df -h /dev/sda1 | awk '/^\/dev/ { print $5 }')
     
    $ echo ${A}
    48%
     
    $ echo ${A/\%/}
    48

  15. #35
    Membre averti
    Inscrit en
    Janvier 2011
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 20
    Par défaut
    Ok ca marche via le cron ! Merci à tous !

    Voici le nouveau script :

    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
    seuil=90
     
    for partition in /dev/sda1 /dev/sda2 /dev/sda3
    do
    	p_utilise=$(df -h $partition | awk '/^\/dev/ { print $5 }')
    	p_utilise2=${p_utilise/\%/}
     
    	if [ $p_utilise2 -gt $seuil ]
    	then
    		t_partition=$(df -h $partition | awk '/^\/dev/ { print $2 }')
    		e_utilise=$(df -h $partition | awk '/^\/dev/ { print $3 }')
    		e_restant=$(df -h $partition | awk '/^\/dev/ { print $4 }')
    		corps="Bonjour,\n\nL'espace disque actuellement disponible sur la partition $partition a dépassé le seuil d'alerte de $seuil %.\n\nTaille de la partition : $t_partition\nEspace utilisé : $e_utilise\nEspace restant : $e_restant\n\nCordialement,\n--\n******"
    		echo -e $corps | mail -s "Alerte : Espace disque $partition" -a "From: ****<*****@******.fr>" admin@******.fr
    	fi
    done

  16. #36
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 103
    Par défaut
    Citation Envoyé par mvvvv Voir le message
    Comme quoi ça valait la peine de se poser la question de "oucéty qu'il est donc le mail ?".
    Ouais, c'est pas faux...

    Pour les [[ ]] ... je ne vois pas pourquoi ça aurait changé quelque chose ...
    Ah ben si! Je confirme!

    Je développe actuellement en ksh pour plusieurs architectures (linux, AIX, HP-UX, Solaris).
    Outre les différences entre les divers ksh, il faut aussi jongler avec les différentes variations de 'test' (et autres 'sed' 'awk', sans compter les 'df' 'id' etc.).

    Par expérience, je confirme qu'il y a parfois une nette différence entre le '[[...]]' natif (du bash ou du ksh) et le '[...]' qui appelle le programme 'test'!

    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    toto=
    $ [[ $toto -eq "" ]] ; echo $?
    0
    $ [ $toto -eq "" ] ; echo $?   
    ksh: [: : unexpected operator/operand
    2
    ou bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ [[ $toto -gt 0 ]] ; echo $?
    1
    $ [ $toto -gt 0 ] ; echo $?
    ksh: [: 0: unexpected operator/operand
    2
    Évidemment, on évite un certain nombre de problèmes en ajoutant des guillemets:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ [ "$toto" -eq "" ] ; echo $?  
    0
    $ [ "$toto" -gt 0 ] ; echo $? 
    1
    Encore que ce dernier ne soit pas complètement satisfaisant: "" est-il, oui ou non, supérieur 0???

    Je te recommande aussi la joyeuseté suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ [[ -f $toto ]] ; echo $?
    1
    $ [ -f $toto ] ; echo $?        
    0

    HTH
    )jack(

  17. #37
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2009
    Messages : 196
    Par défaut
    C'est un peu le drame des shells entre la multiplication des syntaxes et les ajouts successifs on passe son temps à découvrir des choses magiques.

    Je me souviens encore du traumatisme que ça a été le jour ou j'ai tapé * + <Entrée> sous mon terminal


+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Problème python dans script shell et cron
    Par Tintin87 dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 15/11/2011, 22h29
  2. Réponses: 4
    Dernier message: 24/05/2011, 13h42
  3. [Configuration] Problème avec un script de login utilisant une session
    Par HNT dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 27/09/2005, 19h56
  4. Problème avec un script d'ouverture de pop-up
    Par HNT dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 19/08/2005, 16h37
  5. problème avec un script de generation de nom de login
    Par black_code dans le forum Langage
    Réponses: 2
    Dernier message: 04/08/2005, 13h51

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