Cah.ine Posté(e) le 4 décembre 2021 Posté(e) le 4 décembre 2021 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 0 Citer
CoolRaoul Posté(e) le 4 décembre 2021 Posté(e) le 4 décembre 2021 (modifié) 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": 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 : Modifié le 5 décembre 2021 par CoolRaoul 0 Citer
Cah.ine Posté(e) le 4 décembre 2021 Auteur Posté(e) le 4 décembre 2021 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. 0 Citer
Cah.ine Posté(e) le 5 décembre 2021 Auteur Posté(e) le 5 décembre 2021 (modifié) 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é le 5 décembre 2021 par Cah.ine 0 Citer
oracle7 Posté(e) le 5 décembre 2021 Posté(e) le 5 décembre 2021 @Cah.ine Bonjour, 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 ... Il te manquerait pas tout simplement un "/" devant "volume1" dans tes chemins ? Soit : /volume1/downloaded/Import/ Cordialement oracle7😉 0 Citer
CoolRaoul Posté(e) le 5 décembre 2021 Posté(e) le 5 décembre 2021 il y a 8 minutes, oracle7 a dit : @Cah.ine Il te manquerait pas tout simplement un "/" devant "volume1" dans tes chemins ? Tout à fait 0 Citer
Cah.ine Posté(e) le 5 décembre 2021 Auteur Posté(e) le 5 décembre 2021 Oups, sorry, j'avais la tête dans le guidon 🙂 Présentation ici: Je vais checker le path dès que possible merci. 0 Citer
Cah.ine Posté(e) le 5 décembre 2021 Auteur Posté(e) le 5 décembre 2021 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 🙂 0 Citer
CoolRaoul Posté(e) le 5 décembre 2021 Posté(e) le 5 décembre 2021 (modifié) 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é le 6 décembre 2021 par CoolRaoul 0 Citer
CoolRaoul Posté(e) le 5 décembre 2021 Posté(e) le 5 décembre 2021 (modifié) 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_sendmailEt si tu préfère quelque chose de plus propre, il y a ça (pas testé) : https://github.com/zehm/sendEmail Modifié le 5 décembre 2021 par CoolRaoul 0 Citer
Cah.ine Posté(e) le 6 décembre 2021 Auteur Posté(e) le 6 décembre 2021 Ok, un grand merci pour 1) ces précisions 2) ces solutions. Je vais potasser le tout 0 Citer
Messages recommandés
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.