Forum Programmation.shell Mail sur un nouveau fichier

Posté par  .
Étiquettes : aucune
0
10
juin
2008
Bonjour à tous,

Je n'arrive pas à trouver comment créer un programme pour recevoir un mail à chaque fois qu'un utilisateur inscrira un fichier dans un répertoire.

Quelqu'un aurait-il une piste ou une solution?

Merci d'avance.
  • # Inspection

    Posté par  . Évalué à 4.

    Un cronjob qui inspecte le dossier a intervalle réguliers et check les diff sur une liste des fichiers existants?
    • [^] # Re: Inspection

      Posté par  . Évalué à 1.

      J'avais bien pensé au cron mais je ne voyais pas comment faire.

      En bref tu veux dire qu'avec cron toutes les X minutes je copie le contenu du répertoire dans un autre

      Et puis encore avec cron et diff toutes les X-1 minutes je vérifie s'il y a une différence entre ces deux répertoires.

      J'ai peur que celà alourdisse le système avec ces doublons.non?
      • [^] # Re: Inspection

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

        ls -alrt va montrer les derniers fichiers créés à la fin.

        Si tu stockes le nom du dernier fichier créé, si il change, tu envoies un mail.

        Non ?

        ウィズコロナ

        • [^] # Re: Inspection

          Posté par  . Évalué à 1.

          L'idée est bonne mais comment tu récupères le nom du dernier ficher; avec un grep?
          Je ne vois pas comment faire....
          • [^] # Re: Inspection

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

            ls -alrt | awk '{ print $5 }'

            J'ai mis $5 au hasard, je n'ai pas de système pour tester sous la main, sinon tu peux enlever le a des options de ls, et ça sera l'un des premiers champs.

            inotify est une meilleure idée, comme indiqué

            ウィズコロナ

            • [^] # Re: Inspection

              Posté par  . Évalué à 1.

              Merci pour cette réponse mais ta formule permet de ne récupérer que la dernière colonnes contenant le nom du fichier; pour moi j'ai fait
              ls -lrt | awk '{ print $9 }'

              Mais comment récupérer la dernière ligne de ce resultat?

              Avec ceci je pense utiliser dnotify qui enverra un mail en html avec le lien vers ce fichier
              • [^] # Re: Inspection

                Posté par  . Évalué à 2.

                Mais comment récupérer la dernière ligne de ce résultat?

                Avec la commande tail -1 par exemple.

                PS: les mails en HTML, SAI MAL !
    • [^] # Re: Inspection

      Posté par  . Évalué à 1.

      Iwatch, inotify ou incron ne sont pas reconnus dans ma mandriva. Il va falloir que je les installe manuellement.
      Avez-vous des tutos la-dessus?
      Je ne vois pas comment intégrer un mail...
      • [^] # Re: Inspection

        Posté par  . Évalué à 1.

        En fait c'est dnotify sur mandriva et ça marche très bien....

        J'ai donc créer la commande suivante:
        dnotify -C "repertoire" -e "commande" &

        il me reste à trouver comment récupérer le nom du dernier fichier.....
  • # inotify

    Posté par  . Évalué à 3.

    Il y a plein de façons de faire en utilisant inotify.
    Ou alors, prendre du déjà tout fait... Par exemple : http://sourceforge.net/projects/iwatch
  • # Avec incron

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

    Voici un exemple avec incron : http://www.debian-administration.org/articles/581

    Mais pour l'instant incron ne supporte pas le parcours récursif des répertoires.
  • # La solution

    Posté par  . Évalué à 2.

    Voilà avec toute votre aide, je vous remercie, j'ai trouvé la solution.
    En fait, j'ai un photocopieur qui inscrit tous les fax qu'il reçoit dans un dossier partagé. Je voulais être prévenu lors de l'arrivée d'un nouveau fax.


    j'ai donc d'abord installé dnotify et je l'ai configuré
    /etc/sysconfig/dnotify:

    ####################################################
    -C /home/reception_fax -e /root/mail_fax.sh >> /var/log/dnotify
    ####################################################

    puis j'ai créer la commande mail_fax.sh dans /root:

    #####################################################
    #!/bin/sh

    fax=/home/reception_fax
    #liste des différents fichiers avec le plus récent en premier
    ls -lt $fax | awk '{print $9 }' > fichier2.txt
    #Suppression des lignes vides
    sed '/^:space:*$/d' fichier2.txt > fichier.txt
    #Récupération du nom du fichier
    file=`head -n 1 fichier.txt`

    #Creation du mail
    echo "From: \"Administrateur systeme Fax\"" > mail.txt
    echo "To: \"DESTINATAIRE\"" >> mail.txt
    echo "Subject: Un nouveau fax est arrive: $file" >> mail.txt

    #Ajout du corps de texte avec un lien vers le fichier
    echo "Vous venez de recevoir nouveau fax sur le serveur" >> mail.txt
    echo "file://///Serveurgl/Reception_fax/`head -n 1 fichier.txt`" >> mail.txt

    #Ajout en pièce jointe du fichier
    uuencode $fax/$file $file >> mail.txt

    #Envoi du mail
    cat mail.txt | /usr/sbin/sendmail -t DESTINATAIRE
    #########################################################


    NB: Ici, il faut remplacer DESTINATAIRE par une adresse valide

    Voilà si ça peut aider quelqu'un

Suivre le flux des commentaires

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