Script für Email-Benachrichtigung bei Hochladen / Löschen in Ordnern

servilianus

Benutzer
Mitglied seit
26. Dez 2017
Beiträge
898
Punkte für Reaktionen
244
Punkte
63
Ich war auf der Suche nach einer Möglichkeit, sich per Email benachrichtigen zu lassen, wenn in einen Ordner hochgeladen wurde bzw. aus ihm gelöscht wurde.
Auch sollte festgelegt werden, welche Personen eine solche Benachrichtigungsemail erhalten sollen.

Leider gibt es in der Synology in den Bordmitteln eine solche Möglichkeit nicht (bzw. nur ganz rudimentär, via Benachrichtung Upload an den Admin).

Ich bin in der Internet-Recherche auf folgendes Script gestoßen, was im Aufgabenplaner hinterlegt wird, als root auszuführen ist und auch in DSM 7 super funktioniert.

Im Script selbst ist nur der Überwachungsordner anzupassen sowie die Email-Empfänger einzutragen und die Benachrichtigungstexte zu individualisieren. Wichtig ist, dass in den Systemeinstellungen - Benachrichtigungen natürlich die Email-Funktion korrekt angelegt ist.

Hier das Script:



#####ES MUSS ALS ROOT AUSGEFÜHRT WERDEN im Aufgabenplaner. Zeitliche Ausführung (stündlich, minütlich etc.) festsetzen!


##### Sends email to users when defined folder has been modified.


##### If the defined folder has not been modified, an email can be sent to the admin by setting SEND_UNCHANGED to 1.


##### Comparison lists can be recursive or not, depending on RECURSIVE_LIST parameter value.


##### Comparison is only performed on file names, and not contents.


##### During the first run, creates lists for comparison and store them in '/homes/admin/_nasData_scripts' folder (see REP_DATA parameter)


##### TODO: send diffence list as attachment, as too large string sent in mail body can cause empty mail!


##### ------------------------------------ user's parameters


EXPLORE_FOLDER="/volume1/GEMEINSAMER_ORDNER/evtl_Unterordner“


# Separate multiple users by comma in USERS_MAIL_LIST. Example: "user1@domain1.com,user2@domain2.com"


USERS_MAIL_LIST=„XYZ@xyz.de - mit Anführungszeichen"


ADM_MAIL=„Administrator-Email Synology eintragen - mit Anführungszeichen“


FROM_MAIL=„Administrator-Email Synology eintragen mit Anführungszeichen“


RECURSIVE_LIST=1


SEND_UNCHANGED=1


##### ------------------------------------ advanced parameters


REP_DATA="/volume1/homes/admin/_nasData_scripts"


FOLDER_SHORT_NAME=$(echo $(basename "$EXPLORE_FOLDER"))


CURR_FILE="_"${FOLDER_SHORT_NAME//[,; :*+&#~\/\"\'\(\)\\]/}"_curr_list.txt"


PRIOR_FILE="_"${FOLDER_SHORT_NAME//[,; :*+&#~\/\"\'\(\)\\]/}"_prior_list.txt"


EMAIL_TITLE=„Neue Aktivität im NAS-Ordner: \'$FOLDER_SHORT_NAME\'"


EMAIL_INTRO="[ Diese Nachricht betrifft ein Dokument im XXX-Ordner auf Deiner Synology ]





"


##### ------------------------------------


USERS_MAIL_LIST="$ADM_MAIL,$USERS_MAIL_LIST"


RESULT_ALL=""


RESULT_ADM=""


# --------- collecte des paramètre pour retour admin


PARAMS="Parameters:


EXPLORE_FOLDER: $EXPLORE_FOLDER


FOLDER_SHORT_NAME: $FOLDER_SHORT_NAME


REP_DATA: $REP_DATA


CURR_FILE: $CURR_FILE


PRIOR_FILE: $PRIOR_FILE


RECURSIVE_LIST: $RECURSIVE_LIST


SEND_UNCHANGED: $SEND_UNCHANGED"


# --------- creation REP_DATA pour fichiers CURR_FILE & PRIOR_FILE


mkdir -p "$REP_DATA"


if [ ! -d "$REP_DATA" ]; then


/usr/bin/php -r "mail('$ADM_MAIL', '$EMAIL_TITLE: error', 'Error : unable to create $REP_DATA folder.', 'From: $FROM_MAIL');";


exit


fi


if [ ! -d "$EXPLORE_FOLDER" ]; then


RESULT_ADM="NAS folder \'$FOLDER_SHORT_NAME\' error.


Unable to locate folder \'$EXPLORE_FOLDER\'





$PARAMS"


/usr/bin/php -r "mail('$ADM_MAIL', '$EMAIL_TITLE: error', '$RESULT_ADM', 'From: $FROM_MAIL');";


exit


fi


# --------- écriture du contenu du dossier passé dans CURR_FILE


if [ "$RECURSIVE_LIST" != 0 ]; then


ls --ignore-backups --ignore="*Thumbs.db*" --ignore="@eaDir" --ignore="*@SynoResource" --recursive "$EXPLORE_FOLDER"> "$REP_DATA/$CURR_FILE"


else


ls --ignore-backups --ignore="*Thumbs.db*" --ignore="@eaDir" --ignore="*@SynoResource" --recursive "$EXPLORE_FOLDER"> "$REP_DATA/$CURR_FILE"


fi


# --------- comparaison PRIOR_FILE et CURR_FILE


if [ -f "$REP_DATA/$PRIOR_FILE" ]; then


# --------- le fichier 'prior' existe : comparaison possible


DIFF_LIST=$(diff --ignore-file-name-case --unchanged-group-format="" --old-group-format="


-------- %dn Dokument%(n=1?:s) wurde hochgeladen:


%<" --new-group-format="


-------- %dN Datei%(N=1?:s) wurde weiterverarbeitet und/oder gelöscht:


%>" --exclude="*.db" "$REP_DATA/$CURR_FILE" "$REP_DATA/$PRIOR_FILE")


if [ "$DIFF_LIST" != "" ]; then


DATA_TO_SEND=${DIFF_LIST//\'/\\\'}


DATA_TO_SEND=${DATA_TO_SEND//\"/\\\"}


RESULT_ALL="Im Ordner \'$FOLDER_SHORT_NAME\' gab es eine Veränderung:


-------------------------------------------------------


$DATA_TO_SEND"


else


if [ "$SEND_UNCHANGED" != 0 ]; then


RESULT_ADM="NAS folder \'$FOLDER_SHORT_NAME\' ist unverändert.





$PARAMS"


fi


fi


else


# --------- alerte de création des fichiers


RESULT_ADM="Praxisserver Ordner: \'$FOLDER_SHORT_NAME\' Nachricht





File \'$REP_DATA/$CURR_FILE\' wurde hochgeladen.





$PARAMS"


fi


# ----------- copie de liste actuelle (CURR_FILE) pour comparaison future


cp "$REP_DATA/$CURR_FILE" "$REP_DATA/$PRIOR_FILE"


# ----------- envoi email a l'admin ou aux utilisateurs


if [ "$RESULT_ALL" != "" ]; then


/usr/bin/php -r "mail('$USERS_MAIL_LIST', '$EMAIL_TITLE', '$EMAIL_INTRO $RESULT_ALL', 'From: $FROM_MAIL');";


else


#/usr/bin/php -r "mail('$ADM_MAIL', '$EMAIL_TITLE', '$RESULT_ADM', 'From: $FROM_MAIL');";


exit


fi

####Quelle: https://docs.google.com/document/d/1G...
####youtube: https://www.youtube.com/watch?v=webm8LNT-PE
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.669
Punkte für Reaktionen
1.566
Punkte
314
Hi!
Ich würde hier löschen..
… was nun jedoch nur noch durch einen Moderator erledigt werden könnte.

…da du diese Lösung schon dort gepostet hast
Einerseits richtig, anderseits ist dieser Threadtitel etwas aussagekräftiger und kann auch durch abweichende Suchkriterien gefunden werden.

Außerdem ist der Script ja hier nicht in "Code" eingebettet
Da stimme ich dir vollkommen zu (vielleicht kann das ja ein Mod freundlicher Weise noch anpassen), wobei die verlinkte Quelle im Eingangsthread auch nicht als Code eingebettet wurde. Hab mir das heut morgen aber schnell man rüber kopiert und wollte es mir bei Gelegenheit mal anschauen. Von daher danke ich @servilianus an dieser Stelle für das Teilen dieses Codeschnipsel.

Tommes
 
Zuletzt bearbeitet:

w00dcu11er

Benutzer
Sehr erfahren
Mitglied seit
16. Sep 2022
Beiträge
863
Punkte für Reaktionen
298
Punkte
89

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.669
Punkte für Reaktionen
1.566
Punkte
314
Du nimmst es wirklich sehr genau, kann das sein?

Wo wie was wann? Check nicht, sorry
Ich habe die verlinkte Quelle im Eingangsthread aufgerufen, den Inhalt des angezeigten Dokumentes in die Zwischenablage kopiert, ein neues Dokument in Visual Studio Code geöffnet und den Inhalt der Zwischenablage da rein, also „rüber kopiert“. Dadurch erhielt ich einen formatierten Codeschnipsel. Die Datei habe ich dann mit der Endung .sh lokal bei mir gespeichert um mir das später irgendwann mal anzuschauen.
 
  • Like
Reaktionen: w00dcu11er


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat