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 :

Envoi de mails, ssmtp et cron


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 200
    Par défaut Envoi de mails, ssmtp et cron
    Bonjour à tous,

    Je souhaite faire des envois de mails automatiques sur certains événements de tâches cron.

    Pour l'envoi, j'ai installé ssmtp, qui a l'avantage d'être super simple dans nécessiter un serveur smtp interne.

    En "autonome", ssmtp marche très bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat ${LOCAL_DIRECTORY}mail_entete ${DATA_DIRECTORY}texte_du_mail | ssmtp -t



    Par contre, cette même ligne exécutée dans un script lancé par cron ne fonctionne pas.
    ssmtp renvoie 127

    J'ai compris que cron envoie de base sa sortie erreur par mail "quelque part".

    Je pense donc qu'il y a conflit quelque part.

    Merci d'avance

    Nico

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 635
    Par défaut
    Bonjour,

    cron envoie des mails dans la boîte mail local de l'utilisateur.

    il nous faut le script complet, et la ligne cron complète.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 200
    Par défaut
    oui, je peux être plus explicite

    cron :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    34 10 * * * user  /home/user/annuaire/export.sh >> /tmp/annuaire_log
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
     
    #!/bin/bash
     
     
    LOCAL_DIRECTORY="/home/user/annuaire/"
    DATA_DIRECTORY="/home/user/annuaire/data/"
     
     
    echo -e "\n\n _____________ "`date`" ________________________ \n"
     
     
     
    # On récupère les anciens Date_ID
     
    date_ID_Old=`cat ${LOCAL_DIRECTORY}date_ID_Old`
    echo -e "Dernier Date ID traité : "$date_ID_Old
     
    date_ID_LastDownload=`cat ${LOCAL_DIRECTORY}date_ID_Last_Download`
    echo -e "Dernier Date ID téléchargé : "$date_ID_LastDownload
     
     
     
    echo -e "Téléchargementde l'annuaire\n"
    wget --ca-certificate xxx  https://xxxxx.fr
    unzip annuaire annuaire*.txt
     
    fichier=`ls annuaire*.txt`
     
    echo -e "Fichier téléchargé : "$fichier"\n"
     
    # On récupère le Date_ID du fichier téléchargé
    date_ID=`echo $fichier | cut -c33-44`
    echo -e "Date ID téléchargé : "$date_ID"\n"
     
    # on regarde si l'annuaire a évolué depuis le dernier téléchargement
    if [ ${date_ID_LastDownload} == ${date_ID} ]
    then
            echo -e "Date ID Identique - Pas de nouvel annuaire"
     
            echo -e "_rm_ - Suppression fichiers sources"
            rm annuaire*
            echo -e "_rm_ok__\n"
     
     
            echo -e "\n _FIN\n\n"
            exit
    else
            echo "Date ID Différent - Annuaire  mis à jour"
            echo ${date_ID} >   ${LOCAL_DIRECTORY}date_ID_Last_Download
     
            # On extrait les données
            echo -e "_awk_ - Extraction Alsace\n"
            awk -F '|' '  $18 =="L" &&  $36>=67000 && $36<=68999   { print   }{}' ${fichier}   | sort -t'|' -k2 > liste_export_${date_ID}.txt
            echo -e "_awk_ok\n"
            echo -e "_awk_ok\n"
     
     
            echo -e "_rm_ - Suppression fichiers sources"
            rm annuaire*
            echo -e "_rm_ok__\n"
     
     
    fi
     
     
     
     
     
    diff -q liste_export_${date_ID_Old}.txt liste_export_${date_ID}.txt
    retour=$?
     
    if [ $retour == 0 ]
    then
            echo
            echo "Données  Identiques -->"
            echo "     Suppression du nouvel export"
            rm liste_export_${date_ID}.txt
            echo _FIN_
            exit
    else
            echo
            echo  "Données mises à jour"
    fi
     
     
    echo
    echo "_awk_ Formatage des nouvelles données"
    awk -F '|' '{ print $2"\t"$8"\t"$9"\t"$27" "$28" "$29$30" "" "$32" "$33" "$34"\t"$36"\t"$38"\t""\t""\t""\t""\t""\t""\t""\t" }' liste_export_${date_ID}.txt > liste_export_${date_ID}_format.txt
    echo _awk_ok_
     
     
     
     
    echo
    echo "_diff__ Export formatées"
    diff -y -W 270 --suppress-common-lines  liste_export_${date_ID_Old}_format.txt  liste_export_${date_ID}_format.txt  > diff_${date_ID_Old}_${date_ID}.txt
    retour=$?
     
    if [ $retour == 0 ]
    then
            echo "Export Formaté identique"
    else
            echo "Export Formaté different"
    fi
     
    echo _diff_ok
    echo
     
     
     
    echo -e "\nenvoi mail avec différences"
    cat ${LOCAL_DIRECTORY}mail_entete ${DATA_DIRECTORY}diff_${date_ID_Old}_${date_ID}.txt | ssmtp -t
     
    retour=$?
     
    if [ $retour == 0 ]
    then
            echo -e "   --> Mail envoyé avec succès\n\n\n"
    else
            echo -e "   --> Erreur d'envoi : "${retour}"\n\n\n"
    fi
     
     
     
     
     
    echo ${date_ID} >   ${LOCAL_DIRECTORY}date_ID_Old
    echo
     
    echo _FIN_
    config ssmtp :

    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
    24
    25
    26
    27
     
     
     
    # Config file for sSMTP sendmail
    #
    # The person who gets all mail for userids < 1000
    # Make this empty to disable rewriting.
    root=nicolas@domaine.fr
     
    # The place where the mail goes. The actual machine name is required no
    # MX records are consulted. Commonly mailhosts are named mail.domain.com
    mailhub=ssl0.ovh.net:465
     
    AuthUser=nicolas@domaine.fr
    AuthPass=P@sW0rD
    UseTLS=YES
     
    # Where will the mail seem to come from?
    #rewriteDomain=
     
    # The full hostname
    hostname=RPi-4Go
     
    # Are users allowed to set their own From: address?
    # YES - Allow the user to specify their own From: address
    # NO - Use the system generated From: address
    FromLineOverride=YES
    Fichier en tête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    To: nicolas@domaine.fr
    From: no-reply@domaine.fr
    Subject: Mise a jour annuaire

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 635
    Par défaut
    pour le cron :
    ta crontab est fausse : le nom d'utilisateur ne doit pas apparaître dans une crontab utilisateur, qui est normalement éditée à l'aide de la commande crontab -e.

    pour le script :
    je ne suis pas convaincu par ta commande unzip.

    lignes 100 à 103 : il ne peut y avoir deux then à la suite.

    normalement, un ficher téléchargé avec wget conserve la date qu'il avait sur le serveur. Tes triturations de dates dans le nom du fichier n'ont donc pas lieu d'être; utilise stat : les dates se comparent mieux en secondes depuis EPOCH (01/01/1970 00:00:00). mais
    à quoi sert de comparer les dates des noms des fichiers, si de toutes façons tu compares ensuite leur contenu ?
    et tu refais encore une comparaison sur les fichiers reformatés ?!
    KISS :
    - tu télécharges le fichier
    - tu récupères les données dont tu as besoin, et ensuite
    - tu compares avec les données locales.

    pour la config de smtp, et le fichier d'en-tête :
    si ça fonctionne sur la ligne de commandes, le problème ne vient pas de là.

    PS: ligne 9
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    date +'%n%n---------------------------------------------- %c %z ----------------------------------------------%n%n'
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 200
    Par défaut
    Salut,

    Merci pour cette belle relecture détaillée !!

    Citation Envoyé par N_BaH Voir le message
    pour le cron :
    ta crontab est fausse : le nom d'utilisateur ne doit pas apparaître dans une crontab utilisateur, qui est normalement éditée à l'aide de la commande crontab -e.
    Il s'agit d'un fichier (qui appartient à root) qui est dans le répertoire /etc/cron.d/


    Citation Envoyé par N_BaH Voir le message
    pour le script :
    je ne suis pas convaincu par ta commande unzip.
    Celle-ci marche bien. Elle n'extrait que le fichier que je souhaite :annuaire_aaaaMMjj_hhmmss.txt


    Citation Envoyé par N_BaH Voir le message
    lignes 100 à 103 : il ne peut y avoir deux then à la suite.
    Bien vu ! erreur de copier/coller dans le post. J'ai corrigé




    Citation Envoyé par N_BaH Voir le message
    normalement, un ficher téléchargé avec wget conserve la date qu'il avait sur le serveur. Tes triturations de dates dans le nom du fichier n'ont donc pas lieu d'être; utilise stat : les dates se comparent mieux en secondes depuis EPOCH (01/01/1970 00:00:00). mais
    à quoi sert de comparer les dates des noms des fichiers, si de toutes façons tu compares ensuite leur contenu ?
    et tu refais encore une comparaison sur les fichiers reformatés ?!
    En fait, l'archive annuaire.zip (qui a toujours le même nom) contient un fichier annuaire_aaaaMMjj_hhmmss.txt.
    Comme c'est un fichier d'environ 1Go, je regarde avant de comparer le contenu si c'est un nouveau annuaire_aaaaMMjj_hhmmss.txtMais effectivement, si wget conserve la date qu'il avait sur le serveur, je n'aurais même pas besoin de faire la décompression pour voir si annuaire.zip a évolué.

    PS : Je viens de faire le test : la date du fichier est celle du téléchargement :
    ls -al -->

    -rw-r--r-- 1 user user 162M 17 févr. 09:38 annuaire.zip
    après 3 téléchargements successifs :

    $ stat annuaire.zip* -->

    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
    24
    25
    26
      Fichier : annuaire.zip       
       Taille : 168851514   Blocs : 329792     Blocs d'E/S : 4096   fichier     
    Périphérique : 1ch/28d  Inœud : 2961        Liens : 1        
    Accès : (0644/-rw-r--r--)  UID : ( 1001/user)   GID : ( 1001/user)  
     Accès : 2022-02-17 09:38:31.918054056 +0100  
    Modif. : 2022-02-17 09:38:37.787976578 +0100  
    Changt : 2022-02-17 10:28:41.671654459 +0100  
      Créé : -      
     
      Fichier : annuaire.zip.1     
       Taille : 168851514   Blocs : 329792     Blocs d'E/S : 4096   fichier     
    Périphérique : 1ch/28d  Inœud : 2972        Liens : 1        
    Accès : (0644/-rw-r--r--)  UID : ( 1001/user)   GID : ( 1001/user)  
     Accès : 2022-02-17 10:25:11.744220267 +0100  
    Modif. : 2022-02-17 10:25:17.434151298 +0100  
    Changt : 2022-02-17 10:28:58.041452789 +0100  
      Créé : -      
     
      Fichier : annuaire.zip.2     
       Taille : 168851514   Blocs : 329792     Blocs d'E/S : 4096   fichier     
    Périphérique : 1ch/28d  Inœud : 2973        Liens : 1        
    Accès : (0644/-rw-r--r--)  UID : ( 1001/user)   GID : ( 1001/user)  
     Accès : 2022-02-17 10:25:27.314031457 +0100  
    Modif. : 2022-02-17 10:25:34.613942840 +0100  
    Changt : 2022-02-17 10:29:06.331350586 +0100  
      Créé : -



    Ajout Post-envoi : Avant de passer à la moulinette diff, je filtre avec awk, pour ne garder de l'annuaire que les lignes qui m’intéressent

    Citation Envoyé par N_BaH Voir le message
    pour la config de smtp, et le fichier d'en-tête :
    si ça fonctionne sur la ligne de commandes, le problème ne vient pas de là.
    Je dirais même qu'en lançant le script en ligne de commande, tout se passe bien
    $ /home/user/annuaire/export.sh >> /tmp/annuaire_log.

    C'est lorsque le scipt est lancé par cron que ssmtp renvoie une erreur
    C'est pour ça que je penche plus sur un conflit du type : cron essaye d'envoyer un mail avec le stderr et le script un mail avec le cat ... |



    Citation Envoyé par N_BaH Voir le message
    PS: ligne 9
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    date +'%n%n---------------------------------------------- %c %z ----------------------------------------------%n%n'



    Encore Merci, même si mon problème n'est pas résolu

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 635
    Par défaut
    Citation Envoyé par Nico_stras Voir le message
    Il s'agit d'un fichier (qui appartient à root) qui est dans le répertoire /etc/cron.d/
    c'est donc une erreur.
    un utilisateur doit éditer sa crontab utilisateur, comme je l'ai dit, avec la commande crontab -e (ça évite d'avoir à "manipuler" le daemon).
    la modification du fichier que tu indiques est destinée aux tâches systèmes, et/ou assignées par root.

    Celle-ci marche bien. Elle n'extrait que le fichier que je souhaite :annuaire_aaaaMMjj_hhmmss.txt
    je ne savais pas : je n'utilise pas souvent unzip.

    Bien vu ! erreur de copier/coller dans le post. J'ai corrigé
    ok.

    En fait, l'archive annuaire.zip (qui a toujours le même nom) contient un fichier annuaire_aaaaMMjj_hhmmss.txt.
    Comme c'est un fichier d'environ 1Go, je regarde avant de comparer le contenu si c'est un nouveau annuaire_aaaaMMjj_hhmmss.txtMais effectivement, si wget conserve la date qu'il avait sur le serveur, je n'aurais même pas besoin de faire la décompression pour voir si annuaire.zip a évolué.

    PS : Je viens de faire le test : la date du fichier est celle du téléchargement :
    ls -al -->

    -rw-r--r-- 1 user user 162M 17 févr. 09:38 annuaire.zip
    après 3 téléchargements successifs :

    $ stat annuaire.zip* -->

    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
    24
    25
    26
      Fichier : annuaire.zip       
       Taille : 168851514   Blocs : 329792     Blocs d'E/S : 4096   fichier     
    Périphérique : 1ch/28d  Inœud : 2961        Liens : 1        
    Accès : (0644/-rw-r--r--)  UID : ( 1001/user)   GID : ( 1001/user)  
     Accès : 2022-02-17 09:38:31.918054056 +0100  
    Modif. : 2022-02-17 09:38:37.787976578 +0100  
    Changt : 2022-02-17 10:28:41.671654459 +0100  
      Créé : -      
     
      Fichier : annuaire.zip.1     
       Taille : 168851514   Blocs : 329792     Blocs d'E/S : 4096   fichier     
    Périphérique : 1ch/28d  Inœud : 2972        Liens : 1        
    Accès : (0644/-rw-r--r--)  UID : ( 1001/user)   GID : ( 1001/user)  
     Accès : 2022-02-17 10:25:11.744220267 +0100  
    Modif. : 2022-02-17 10:25:17.434151298 +0100  
    Changt : 2022-02-17 10:28:58.041452789 +0100  
      Créé : -      
     
      Fichier : annuaire.zip.2     
       Taille : 168851514   Blocs : 329792     Blocs d'E/S : 4096   fichier     
    Périphérique : 1ch/28d  Inœud : 2973        Liens : 1        
    Accès : (0644/-rw-r--r--)  UID : ( 1001/user)   GID : ( 1001/user)  
     Accès : 2022-02-17 10:25:27.314031457 +0100  
    Modif. : 2022-02-17 10:25:34.613942840 +0100  
    Changt : 2022-02-17 10:29:06.331350586 +0100  
      Créé : -
    curieux. :/
    et en ajoutant l'option --timestamp ?
    le serveur est-il en accès libre (nous pourrions faire des tests de notre côté), ou nécessite-t-il une identification privée ?

    Ajout Post-envoi : Avant de passer à la moulinette diff, je filtre avec awk, pour ne garder de l'annuaire que les lignes qui m’intéressent

    Je dirais même qu'en lançant le script en ligne de commande, tout se passe bien
    $ /home/user/annuaire/export.sh >> /tmp/annuaire_log.

    C'est lorsque le scipt est lancé par cron que ssmtp renvoie une erreur
    C'est pour ça que je penche plus sur un conflit du type : cron essaye d'envoyer un mail avec le stderr et le script un mail avec le cat ... |
    essaye d'envoyer un simple mail depuis cron :puis
    reprend ton fichier d'en-tête, avec un ficher-message plus simple ("Hellooo !")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    * *        * * * cat enTete message | ssmtp -t 2>/tmp/testMessage.log
    ...
    ?

    PS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F '|' '$18=="L" && $36~"^6[78]"' "$fichier"   | sort -t'|' -k2 > "/chemin/absolu/vers/liste_export_$date_ID.txt"
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 200
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    un utilisateur doit éditer sa crontab utilisateur, comme je l'ai dit, avec la commande crontab -e (ça évite d'avoir à "manipuler" le daemon).
    la modification du repertoire que tu indiques /etc/cron.d/est destinée aux tâches systèmes, et/ou assignées par root.
    Citation Envoyé par N_BaH Voir le message
    essaye d'envoyer un simple mail depuis cron :puis
    reprend ton fichier d'en-tête, avec un ficher-message plus simple ("Hellooo !")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    * *        * * * cat enTete message | ssmtp -t 2>/tmp/testMessage.log
    ...
    ?
    Je vais tester. Pour ma culture, où est sauvegardé le crontab utilisateur ? dans le home utilisateur ?


    Citation Envoyé par N_BaH Voir le message
    "wget ne conserve pas l'heure serveur du fichier "
    curieux. :/
    et en ajoutant l'option --timestamp ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    En-tête de dernière modification manquant — horodatage arrêté.                                                                                                                                                     
    2022-02-17 13:16:42 (28,3 MB/s) — « PS_LibreAcces » sauvegardé [168851514/168851514]
    Citation Envoyé par N_BaH Voir le message
    le serveur est-il en accès libre (nous pourrions faire des tests de notre côté), ou nécessite-t-il une identification privée ?
    https://service.annuaire.sante.fr/an.../PS_LibreAcces
    Attention, sans le certificat, il faudra mettre l'option –-no-check-certificate

    Citation Envoyé par N_BaH Voir le message
    PS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F '|' '$18=="L" && $36~"^6[78]"' "$fichier"   | sort -t'|' -k2 > "/chemin/absolu/vers/liste_export_$date_ID.txt"
    Je garde ça sous le coude pour mon futur approfondissement de awk des expressions régulières

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 635
    Par défaut
    Pour ma culture, où est sauvegardé le crontab utilisateur ?
    sous /var/spool/cron/<userName>
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 635
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ wget --timestamp ...
    [...]
    En-tête de dernière modification manquant — horodatage arrêté.
    c'est mort : pas d'accès à la date du fichier sur le serveur.

    l'extraction des données avec awk prend moins de temps que le téléchargement, et à peine plus que la décompression.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 200
    Par défaut
    Citation Envoyé par Nico_stras Voir le message
    C'est pour ça que je penche plus sur un conflit du type : cron essaye d'envoyer un mail avec le stderr et le script un mail avec le cat ... |
    Comment crontab envoie-t-il un mail avec le stderr ?


    J'ai eu plusieurs fois un fichier dead.letter dans mon home, avec toutes les lignes de progression du wget.



    Et dans syslog :

    sSMTP[843]: RCPT TO:<user@RPi-4Go> (504 5.5.2 <user@RPi-4Go>: Recipient address rejected: need fully-qualified address)

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 200
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    # m h  dom mon dow   command   
    47 16 * * *   /home/user/annuaire/export.sh >> /tmp/annuaire_log
    NOK

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Feb 17 16:47:01 RPi-4Go CRON[5489]: (user) CMD (/home/user/annuaire/export.sh >> /tmp/annuaire_log) 
    Feb 17 16:47:16 RPi-4Go sSMTP[5510]: Creating SSL connection to host   
    Feb 17 16:47:17 RPi-4Go sSMTP[5510]: SSL connection using ECDHE_RSA_AES_256_GCM_SHA384 
    Feb 17 16:47:17 RPi-4Go cron[5510]: sendmail: RCPT TO:<user@RPi-4Go> (504 5.5.2 <user@RPi-4Go>: Recipient address rejected: need fully-qualified address)  
    Feb 17 16:47:17 RPi-4Go sSMTP[5510]: RCPT TO:<user@RPi-4Go> (504 5.5.2 <user@RPi-4Go>: Recipient address rejected: need fully-qualified address)   
    Feb 17 16:47:17 RPi-4Go CRON[5488]: (user) MAIL (mailed 252443 bytes of output but got status 0x0001 from MTA#012)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    # m h  dom mon dow   command  
    49 16 * * *  cat /home/user/annuaire/mail_entete  /home/user/date_ID_Old | /usr/sbin/ssmtp -t 2>/tmp/testMessage.log
    PS : j'ai du mettre /usr/sbin/ssmtp car de base, il utilise /bin/sh et non/bin/bash ; je suppose que /usr/sbin n'est pas dans son PATH.

    OK
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Feb 17 16:49:01 RPi-4Go CRON[5592]: (user) CMD (cat /home/user/annuaire/mail_entete_RPPS  /home/user/annuaire/date_ID_Old | /usr/sbin/ssmtp -t 2>/tmp/testMessage.log)   
    Feb 17 16:49:01 RPi-4Go sSMTP[5594]: Creating SSL connection to host   
    Feb 17 16:49:01 RPi-4Go sSMTP[5594]: SSL connection using ECDHE_RSA_AES_256_CBC_SHA1   
    Feb 17 16:49:03 RPi-4Go sSMTP[5594]: Sent mail for no-reply@domaine.fr (221 domaine.fr Service closing transmission channel) uid=1001 username=user outbytes=370

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 635
    Par défaut
    modifie la ligne 112 ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    set -x
    cat ${LOCAL_DIRECTORY}mail_entete ${DATA_DIRECTORY}diff_${date_ID_Old}_${date_ID}.txt | ssmtp -t
    set +x
    et modifie la ligne crontab ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    18 01 * * *   /home/user/annuaire/export.sh 2> /tmp/ERR_annuaire.log
    tu adaptes l'heure, bien sûr.

    je pressens un problème de fichier d'en-tête...
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 200
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Citation Envoyé par Nico_stras Voir le message
    Pour ma culture, où est sauvegardé le crontab utilisateur ? dans le home utilisateur ?
    sous /var/spool/cron/<userName>
    Faut donc que je rajoute à ma sauvegarde rsync J'ai l'habitude de sauvegarder /etc, mais pas /var/spool/ que je pensais être du "tampon temporaire".

    Ils sont bien conservés après un shutdown ?

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 200
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    je pressens un problème de fichier d'en-tête...
    Pas du tout !!


    ligne 56: ssmtp : commande introuvable


    Je confirme donc que cron attribue comme PATH : /usr/bin:/bin uniquement (vu en faisant un echo $PATH dans le scriptTout ça pour ça !!


    Ca marche avec /usr/sbin/ssmtp, mais ça ne m'explique pas .
    sSMTP[5510]: RCPT TO:<user@RPi-4Go> (504 5.5.2 <user@RPi-4Go>: Recipient address rejected: need fully-qualified address) dans le syslog.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 635
    Par défaut
    il y a les mails sous /var/spool ! tout ça est bien gardé au chaud entre les démarrages.

    Recipient address rejected: need fully-qualified address
    c'est à cause de ça, que j'imaginais un problème de fichier d'en-tête.
    mais, ça pourrait venir d'un /etc/hosts incomplet...

    donc, maintenant, le mail est bien envoyé, et bien reçu ?
    tu peux passer la discussion à ce sujet en Résolu, et ouvrir une nouvelle discussion sur l'erreur non bloquante.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

Discussions similaires

  1. Envoi de mail avec ssmtp
    Par riquet90 dans le forum Raspberry Pi
    Réponses: 0
    Dernier message: 02/08/2018, 16h06
  2. Réponses: 1
    Dernier message: 27/08/2014, 02h26
  3. [MySQL] TACHE CRON ENVOI DE MAIL AUTOMATIQUE
    Par reunionbysat dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 28/10/2010, 00h17
  4. [CRON] Envoi de mail automatique
    Par a_me dans le forum Serveurs (Apache, IIS,...)
    Réponses: 10
    Dernier message: 20/10/2007, 12h17
  5. envoi de mail, protocol SMTP langage C
    Par Heimdall dans le forum Développement
    Réponses: 2
    Dernier message: 23/05/2003, 11h22

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