Forum général.général Udev et envoie de mail

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
1
20
oct.
2015

Bonjour,

J'ai un script qui se lance au branchement d'un disque usb, à la fin du script j'envoie une notification par mail qui contient différentes informations avec cette ligne :

Règle Udev

SUBSYSTEM!="block|scsi", GOTO="usb_end" ENV{DEVTYPE}=="partition", GOTO="usb_end" ACTION!="add", GOTO="usb_end"
ACTION=="add",ATTRS{busnum}!="",ATTRS{devnum}!="",ATTRS{idProduct}=="10b8",ATTRS{idVendor}=="1058",ATTRS{serial}=="575841314535344D434C3632",RUN+="/usr/bin/sh /root/launch-backup.sh"
ACTION=="add",ATTRS{busnum}!="",ATTRS{devnum}!="",ATTRS{idProduct}=="0748",ATTRS{idVendor}=="1058",ATTRS{serial}=="575838314139324C31353233",RUN+="/usr/bin/sh /root/launch-backup.sh"
ACTION=="add",ATTRS{busnum}!="",ATTRS{devnum}!="",ATTRS{idProduct}=="1078",ATTRS{idVendor}=="1058",ATTRS{serial}=="57584631453135435348584C",RUN+="/usr/bin/sh /root/launch-backup.sh" 

LABEL="usb_end"

launch-backup.sh n'est qu'un script intermédiaire qui passe par "at" pour contourner le timeout des règles udev

script de backup

#!/bin/bash
BIN="/usr/bin"
DIRLOG="/var/log/backup.log"
LOGGER="/usr/bin/logger"

${BIN}/sleep 10
NBRSYNC=`${BIN}/ps faux | ${BIN}/grep rsync | ${BIN}/wc -l`
if [ ${NBRSYNC} -eq 2 ]
then
    ${BIN}/echo "Début de la sauvegarde" > ${DIRLOG}
    ${BIN}/echo `${BIN}/date` >> ${DIRLOG}

    ${LOGGER} -i -t backup -p local0.info "Début de la sauvegarde"

    ${LOGGER} -i -t backup -p local0.info "Montage du disque"
    MOUNT=`${BIN}/mount /dev/sauvegardeUSB /media/usb >> ${DIRLOG} 2>&1`
    if [ ${?} -ne 0 ]
    then
        ${LOGGER} -i -t backup -p local0.err "Erreur lors du montage du disque, voir le fichier ${DIRLOG}"
        SUBJECT="ERREUR"
    else
        RSYNC=`${BIN}/rsync -ah --stats /media/backup/* /media/usb >> ${DIRLOG} 2>&1`
        if [ ${?} -ne 0 ]
        then
            ${LOGGER} -i -t backup -p local0.err "Erreur lors de la copie des fichiers, voir le fichier ${DIRLOG}"
            SUBJECT="ERREUR"
        fi

        ${LOGGER} -i -t backup -p local0.info "Démontage du disque"
        UMOUNT=`${BIN}/umount /media/usb >> ${DIRLOG} 2>&1`
        if [ ${?} -ne 0 ]
        then
            ${LOGGER} -i -t backup -p local0.err "Erreur lors du démontage du disque, voir le fichier ${DIRLOG}"
            SUBJECT="ERREUR"
        fi
    fi

    ${BIN}/echo "---------------------" >> ${DIRLOG}
    ${BIN}/echo `date` >> ${DIRLOG}
    ${BIN}/echo "Fin de la sauvegarde" >> ${DIRLOG}

    ${LOGGER} -i -t backup -p local0.info "Fin de la sauvegarde"

    ${BIN}/cat ${DIRLOG} | ${BIN}/mail -s "Rapport de sauvegarde ${SUBJECT}" MONMAIL
fi

Quand je lance le script à la main en root le résultat du cat en bien dans le contenue du mail mais lorsque c'est la règle udev qui m'envoie le mail le contenue est en pièce jointe dans un format binaire.

Je vois pas trop la différence qu'il peut avoir entre ces deux contextes ?

  • # Infos complémentaires ?

    Posté par  . Évalué à 1.

    Ce serait mieux avec ta règle udev au complet et éventuellement les logs syslog s'il y en a…

    • [^] # Re: Infos complémentaires ?

      Posté par  (site web personnel) . Évalué à 1.

      Message d'origine modifié et pas de syslog intéressant si ce n'est pour dire que tout va bien

      Born to Kill EndUser !

      • [^] # Re: Infos complémentaires ?

        Posté par  . Évalué à 1.

        Tout d'abord, je ne comprends pas bien l'intérêt du ${BIN} mais tu dois avoir une raison de tout surcharger et notamment sur le fait d'avoir les coreutils (sleep, mount, …) dans /usr/bin plutôt que dans /bin.

        Tu as peut-être un problème de locale. Essaye d'exporter LC_ALL en début de script.
        Ou sinon dans un premier temps, commence par ajouter les options -v et -d à ta commande mail.

        • [^] # Re: Infos complémentaires ?

          Posté par  (site web personnel) . Évalué à 1.

          Tout d'abord, je ne comprends pas bien l'intérêt du ${BIN} mais tu dois avoir une raison de tout surcharger et notamment sur le fait d'avoir les coreutils (sleep, mount, …) dans /usr/bin plutôt que dans /bin.

          Dans tout mes scripts je mets systématiquement le chemin d'accès au programme que je veux utiliser. Il s'avère que sur rhel ils se trouvent de /usr/bin et non dans /bin.

          Je vais tester le -v -d et LC_ALL.

          Born to Kill EndUser !

  • # La solution

    Posté par  (site web personnel) . Évalué à 1.

    Au cas ou le problème est causé par les accents que j'ai mis dans le script. La solution la plus simple est de na pas mettre d'accents.

    Born to Kill EndUser !

    • [^] # Re: La solution

      Posté par  . Évalué à 1.

      Vérifie bien que ton fichier de script est en utf8. Au pire, tu peux changer de mailer et tpasser par mutt pour gérer les pièces-jointes en MIME (option -a).

      Merci d'avoir poster l'origine du problème.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.