Synology-Forum.nl
Firmware => Synology DSM algemeen => Topic gestart door: Stayf op 15 maart 2020, 09:54:11
-
Hoi allemaal,
Sinds afgelopen November ben ik in het bezit van de Synology DS918+ wat mijn allereerste NAS is.
Ik ben er tot nu toe heel blij mee, maar ik krijg 1 ding maar niet voor elkaar.
De NAS is bedoeld als fileserver die ik en mijn zakenpartner samen gebruiken voor het bedrijfje wat wij hebben.
Nu zou ik graag een email/melding willen krijgen zodra mijn zakenpartner een bestand heeft toegevoegd of heeft gewijzigd aan 1 specifieke map. Dan hoeft hij mij namelijk niet steeds via app/telefoon op de hoogte te houden. :)
Ik heb online naar deze wens gezocht en kwam een YouTube-video + bijbehorend script tegen van Willie Howe, om dit te doen. https://www.youtube.com/watch?v=webm8LNT-PE (https://www.youtube.com/watch?v=webm8LNT-PE)
Ik heb elke handeling gevolgd, maar krijg het nog steeds niet voor elkaar. :'(
Het is me overigens wel gelukt om in te stellen dat ik een email krijg van de NAS zelf zodra er iets met het systeem is gebeurd. Zo kreeg ik bijvoorbeeld een mail dat de NAS abnormaal was afgesloten, toen er in huis een zekering in de meterkast sprong.
Ik zou graag op ditzelfde emailadres de meldingen krijgen zodra mijn zakenpartner een wijzing aanbrengt.
Zou iemand mij hierbij kunnen helpen? Wellicht gebruiken jullie een ander of eigengemaakt script :?:
-
Zet het vinkje eens aan "Uitvoerdetails verzenden via e-mail" in de Taakplanner.
Dan krijg je een mail met waarschijnlijk te zien waarom het niet werkt.
-
Aah kijk, ja klopt.
Ik krijg dit, kun je daar iets mee? :) :
Taak: Notify On File Upload
Starttijd: Mon, 16 Mar 2020 14:31:30 GMT
Stoptijd: Mon, 16 Mar 2020 14:31:31 GMT
Huidige status: 1 (Onderbroken)
Standaard uitvoer/fout:
sh: line 52: /volume1/homes/admin/_nasData_scripts/_syncs_curr_list.txt:
Permission denied
cp: cannot create regular file
'/volume1/homes/admin/_nasData_scripts/_syncs_prior_list.txt':
Permission denied
-
Draait die Task wel als root?
-
Nee, hij stond eerst wel als ROOT. Toen deed ie niets dus heb daar veranderd. Hij Moet dus op Root?
-
Niet Root maar root. ;)
-
Dan staat er dit:
Beste gebruiker
Taakplanner heeft een geplande taak voltooid.
Taak: Notify On File Upload
Starttijd: Mon, 16 Mar 2020 15:49:13 GMT
Stoptijd: Mon, 16 Mar 2020 15:49:15 GMT
Huidige status: 1 (Onderbroken)
Standaard uitvoer/fout:
-
Zonder te weten hoe het script is, valt er niets te zeggen. Bij scripts moet je veel logging regels toevoegen als je geen eenduidige fout-regels tegenkomt waar hij op afbreekt.
root is in elk geval beter omdat je nu niet tegen rechten oploopt. (Rechten kun je later wel oplossen om niet alles als root te hoeven doen)
-
Hier is het script te vinden.
https://docs.google.com/document/d/1GWrcX5ZVdDwefYUqMOTsQIRKnYV57CEuuPQdn66rwpc/edit
Ik heb dit exact gekopieerd. Ik heb alleen het mailadres en het pad naar de specifieke map op de NAS veranderd. Meer niet.
-
Je kunt hem ook hier plaatsen. Werkt wel zo lekker.
##### 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/clients"
# Separate multiple users by comma in USERS_MAIL_LIST. Example: "user1@domain1.com,user2@domain2.com"
USERS_MAIL_LIST="myemail@email.com"
ADM_MAIL="myemail@email.com"
FROM_MAIL="myemail@email.com"
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="NAS - Folder \'$FOLDER_SHORT_NAME\' analysis"
EMAIL_INTRO="[ This is an automatic email sent from the NAS to all users ]
"
##### ------------------------------------
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 file%(n=1?:s) added:
%<" --new-group-format="
-------- %dN file%(N=1?:s) deleted:
%>" --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="NAS folder \'$FOLDER_SHORT_NAME\' has been modified:
-------------------------------------------------------
$DATA_TO_SEND"
else
if [ "$SEND_UNCHANGED" != 0 ]; then
RESULT_ADM="NAS folder \'$FOLDER_SHORT_NAME\' is unchanged.
$PARAMS"
fi
fi
else
# --------- alerte de création des fichiers
RESULT_ADM="NAS folder \'$FOLDER_SHORT_NAME\' analysis:
File \'$REP_DATA/$CURR_FILE\' has been created.
$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
Volgens mij zijn er in elk geval een paar returns teveel ingeslopen op de verkeerde plekken.
-
Volgens mij zijn er in elk geval een paar returns teveel ingeslopen op de verkeerde plekken.
Bedoel je dan in het originele script? Of bedoel je ws bij mijn copy/paste?
-
Getest en kreeg ook:
Taak: Notify On File Upload
Starttijd: Mon, 16 Mar 2020 22:25:28 GMT
Stoptijd: Mon, 16 Mar 2020 22:25:28 GMT
Huidige status: 1 (Onderbroken)
Standaard uitvoer/fout:
Het script vervolgens in Notepad++ gekopieerd.
Op m'n NAS gezet als test.sh
Vervolgens gedraaid in Putty en krijg: "syntax error: unexpected end of file:"
Mijn eerste gedachte was ook: er zullen wel de niet zichtbare Windows CR/LF inzitten, en ja hoor.
De oplossing is:
1 - In Notepad++
2 - Ga naar Edit > EOL Conversion en klik op: Unix (LF)
Hiermee zijn de Windows control characters CR/LF (Carriage Return/Line Feed) omgezet naar Unix Line Feed in test.sh.
3 - test.sh (noem de file zoals je wilt) in de map home (ben ingelogd als admin) gezet. (maak zelf je map keuze)
4 - In de Taakplanner dat hele script vervangen door: bash /volume1/homes/admin/test.sh
Ik kan je het mailtje niet laten zien omdat GMAIL moeilijk doet:
ssmtp: Authorization failed (334 eyJzdGF0dXMiOiI0MDAiLCJzY2hlbWVzIjoiQmVhcmVyIiw ic2NvcGUiOiJodHRwczovL21haWwuZ29vZ2xlLmNvbS8ifQ==)
terwijl ik wel een test mail kan verzenden.....
Het probleem met GMAIL zal wel door PHP komen:
/usr/bin/php -r "mail('$USERS_MAIL_LIST', '$EMAIL_TITLE', '$EMAIL_INTRO $RESULT_ALL', 'From: $FROM_MAIL');";
Maar het werkt wel goed, de nodige files worden n.l. NU wel gemaakt in de map home, dus de mail zal ook wel verzonden worden, als je geen GMAIL hebt tenminste ::) :
[attachimg=1]
-
Bedankt voor de uitleg! :)
Het gaat bij mij denk ik fout bij stap 3 en/of 4.
Ik weet niet of je precies hebt omschreven wat te doen of dat je wellicht wat "vanzelfsprekende" handelingen hebt weggelaten. Ik ben nog een behoorlijke noob namelijk. :lol:
-
Geen optie om gewoon de transfer-logs te gebruiken ?
Welke "file services" gebruik je ? Windows SMB (een "file share/ mapped-drive) ? Of werk je met MAC systemen en gebruik je AFP of zoiets?
-
Het gaat bij mij denk ik fout bij stap 3 en/of 4.
Ik denk stap 4:
4 - In de Taakplanner dat hele script vervangen door: bash /volume1/homes/admin/test.sh
Had het script test.sh vergeten, in mijn voorbeeld. ::)
-
Aah oke.
Maar dan krijg ik alsnog dit:
Beste gebruiker
Taakplanner heeft een geplande taak voltooid.
Taak: Notify On File Upload
Starttijd: Tue, 17 Mar 2020 09:56:24 GMT
Stoptijd: Tue, 17 Mar 2020 09:56:24 GMT
Huidige status: 127 (Onderbroken)
Standaard uitvoer/fout:
bash: /volume1/video/home/test.sh: No such file or directory
-
Weet je zeker dat het pad goed is?
/volume1/video/home//test.sh
-
Ja, dit is het exacte pad:
/volume1/video/home/test
-
En het script heet test.sh ?
-
Yes, hij heet "test.sh"
4 - In de Taakplanner dat hele script vervangen door: bash /volume1/homes/admin/test.sh
Moet ik nog iets met de Admin/gebruiker?
-
Nee, ik had maar een voorbeeld gegeven, zoals ik het getest had.
Hoe je het script noemt, waar je het script ook neerzet......
Maar je krijgt de foutmelding:
/volume1/video/home/test.sh: No such file or directory
M.a.w., het script wordt dus niet gevonden.
-
Ik denk dat ie m nu wel vindt, wat ik krijg deze melding
Taak: Notify On File Upload
Starttijd: Tue, 17 Mar 2020 10:50:21 GMT
Stoptijd: Tue, 17 Mar 2020 10:50:23 GMT
Huidige status: 1 (Onderbroken)
Standaard uitvoer/fout:
-
In dat script moeten gewoon logging toegevoegd worden om te zien waar het mis gaat. b.v. via een paar
echo 'Ik start nu met ....'
commando's. Dan weet je of het al bij de eerste regel mis gaat, of gedurende het script.
Zonder logging of fouten met regelnummer is het onbegonnen werk. Nu worden bij fouten alleen mailtjes verstuurd. Maar als dat deel niet werkt heb je er niets aan.