Aller au contenu

Monitorer dossier + envoyer fichier mail

Featured Replies

Posté(e)

Bonjour.

 

Je souhaiterai mettre en place un automatisme pour mon syno mais je ne sais pas trop quelle approche chosir (script/package existant...)

L'objectif serait de :

1) monitorer un folder sur depose d'un fichier x.

2) quand fichier déposé, envoi de ce fichier par email a une adresse donnée.

Le but serait d'utiliser ceci pour envoyer un fichier ebook vers un kindle quand je le depose dans le folder monitoré.

 

Si on peut eviter une solution ''lourde'' (genre docker + outil d'automatisation), ca serait mieux.

 

Si qqun a une idée je suis preneur

 

Posté(e)

A mon avis, le plus light (en termes de ressources en particulier) est de le faire via un script shell.

Le pre-requis est d'installer ce package "inotify-tools":

image.png.32c8e3644f66bb9db69ef392403e43d3.png

Ensuite lancer en tache de fond un script basé sur ce modèle :

 

#!/bin/bash
PATH=/bin:/usr/bin:/usr/local/bin
WATCHED_DIR=${1:-/var/tmp/watched_dir} # répertoire que j'ai utilisé pour tester
#                     
inotifywait --recursive \
            --quiet \
            --event close_write \
            --format "%w%f" \
            --monitor $WATCHED_DIR | while read newfile
do
    echo >&2 "received: $newfile"
    # ici ajouter la commande pour envoyer le fichier "$newfile" par email
done

Pour la commande email je pense qu'un autre membre du forum saura proposer une façon de faire.

En ce qui concerne le lancement automatique du script, je préconise, après l'avoir testé à la main, de le faire au boot, via le gestionnaire de taches (task manager) de cette façon :

image.png.970bfc348c4b542618fff012e39a3b4e.png

Modifié par CoolRaoul

Posté(e)
  • Auteur

Hello.

Super, je vais potasser le tout des que j'ai un peu de dispo 🙂

Un grand merci d'avoir pris le temps de regarder tout ça.
 

Posté(e)
  • Auteur

OK alors j'ai just spécifié mon rep, il semble bien y acceder

#!/bin/bash
PATH=/bin:/usr/bin:/usr/local/bin
WATCHED_DIR=${volume1/downloaded/Import/} #dir
#                     
inotifywait --recursive \
            --quiet \
            --event close_write \
            --format "%w%f" \
            --monitor $WATCHED_DIR | while read newfile
do
    echo >&2 "received: $newfile"
    # ici ajouter la commande pour envoyer le fichier "$newfile" par email
done

 

Mais j'ai par contre une erreur: "No Files specified to watch!" dans les logs.
Le folder "volume1/downloaded/Import/" existe (et casse respectée), et j'y ai placé un fichier "test".

Quand je regarde le code source de inotify (https://github.com/inotify-tools/inotify-tools/blob/master/src/inotifywait.c), sur le message en question, je tombe sur

 
 FileList list;
 construct_path_list(argc, argv, fromfile, &list);

 if (0 == list.watch_files[0]) {
   fprintf(stderr, "No files specified to watch!\n");
   goto failure;
 }

En remontant la chaine, dans "construct_path_list" (https://github.com/inotify-tools/inotify-tools/blob/master/src/common.c), on dirait qu'il attends un --fromfile, ou qu'il considere mon repertoire comme un fichier.
Apres de ce que j'ai compris le --fromfile est normalement juste la en alternative pour pouvoir passer une liste de path sans tous les mettre dans la commande.

J'en deduis donc que ca vient de mon WATCHED_DIR, j'ai enlevé le "1:-" de votre example, mais si je remet WATCHED_DIR=${1:-volume1/downloaded/Import/}

alors il me renvoie "Couldn't watch volume1/downloaded/Imports/: No such file or directory"

J'avoue que si j'ai qq vieilles notions de dev C "basiques", je ne suis pas familier du tout avec le coding sous env linux en général (les paths et autres), et sur syno, donc le "1:-" m'échappe totalement.

Je continue a chercher.

 

 

 

Modifié par Cah.ine

Posté(e)

@Cah.ine

Bonjour,

  1. Comme sur tout forum, il est d'usage que les nouveaux membres passent par la rubrique [PRESENTATION] pour faire la leur. Certains ici, y sont sensibles et de plus cela facilite les réponses en fonction du niveau de compétences du membre et de ses équipements. Cela dit, rassures-toi il n'est pas trop tard pour bien faire ...

  2. Il te manquerait pas tout simplement un "/" devant "volume1" dans tes chemins ? Soit :

    /volume1/downloaded/Import/

Cordialement

oracle7😉

Posté(e)
il y a 8 minutes, oracle7 a dit :

@Cah.ine

Il te manquerait pas tout simplement un "/" devant "volume1" dans tes chemins ?

Tout à fait 

Posté(e)
  • Auteur

Oups, sorry, j'avais la tête dans le guidon 🙂

Présentation ici:

Je vais checker le path dès que possible merci.

 

Posté(e)
  • Auteur

OK cela fonctionne avec ces 3 modifs (ou du moins les 2 premiers sont nécéssaires, la derniere étant pour catcher les moved_to events)

- Path avec "/"

- Definition de WATCHED_DIR sans les ${}

- Rajout de l'event "moved_to"

 

#!/bin/bash
PATH=/bin:/usr/bin:/usr/local/bin
WATCHED_DIR=/volume1/downloaded/Import/ #dir
#                     
inotifywait --recursive \
            --quiet \
            --event close_write \
            --event moved_to \
            --format "%w%f" \
            --monitor $WATCHED_DIR | while read newfile
do
    echo >&2 "received: $newfile"
    # ici ajouter la commande pour envoyer le fichier "$newfile" par email
done

Il me reste a

1) Filtrer les formats de fichiers monitorés (".epub")

2) Gérer l'envoi du mail.

Je maj le script dans ce post si ca peut aider d'autres personnes.

Merci pour les infos 🙂

Posté(e)

 

Citation
- Definition de WATCHED_DIR sans les ${}

La syntaxe "${1:-<valeur_défaut>} permettait de mettre un défaut sauf si spécifié explicitement en $1 
 

Citation
- Rajout de l'event "moved_to"

En en effet, ça dépend si le fichier est directement copié/généré dans le dossier ou juste déplacé
 

Citation
1) Filtrer les formats de fichiers monitorés (".epub")

Après le "do" ajouter:
[[ $1 == *.epub ]] || continue
 

Citation
2) Gérer l'envoi du mail.

Quelqu'un va bien te trouver ça, 

 

 

Modifié par CoolRaoul

Posté(e)
Quelqu'un va bien te trouver ça,
Ci joint un script ("my_sendmail") perl (qui nécessite bien entendu l'installation du paquet correspondant) que j'utilise pour envoyer des mails en ligne de commande.
Son mode utilisation est en tête du code.
my_sendmail
Et si tu préfère quelque chose de plus propre, il y a ça (pas testé) :
https://github.com/zehm/sendEmail

Modifié par CoolRaoul

Posté(e)
  • Auteur

Ok, un grand merci pour 1) ces précisions 2) ces solutions.

Je vais potasser le tout

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.