Aller au contenu

Monitorer dossier + envoyer fichier mail


Cah.ine

Messages recommandés

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

 

Lien vers le commentaire
Partager sur d’autres sites

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
Lien vers le commentaire
Partager sur d’autres sites

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
Lien vers le commentaire
Partager sur d’autres sites

@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😉

Lien vers le commentaire
Partager sur d’autres sites

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 🙂

Lien vers le commentaire
Partager sur d’autres sites

 

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
Lien vers le commentaire
Partager sur d’autres sites

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
Lien vers le commentaire
Partager sur d’autres sites

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…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

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.