Automatiseer handelingen met Taakplanner

taken,automatisering,taakplanner
Taakplanner

De Taakplanner is een applicatie waarmee je taken of scripts kunt inplannen op vooraf ingestelde tijden. Via het menu van het configuratiescherm kom je bij de Taakplanner uit. De hoofdpagina van de taakplanner toont alle bestaande taken en biedt de optie om taken te maken, te bewerken of uit te voeren.

configuratiescherm DSM7.1

Het instellen van taken

Sommige taken worden door de applicaties zelf ingesteld. Dit is te vergelijken met de taakplanner in MS Office die regelmatig controleert of er updates zijn. Op soortgelijke wijze kun je ook voor de NAS taken aanmaken die met een bepaalde regelmaat worden uitgevoerd. Je hoeft er dus niet meer bij na te denken of zelf te agenderen.

Om een service taak terugkerend in te stellen

De Taakplanner biedt de mogelijkheid om services in het systeem te stoppen of te starten. Dit kan van pas komen wanneer een bepaalde netwerkservice vastloopt. Zo krijgt de proxy server bij het herstarten van de router een nieuw ipv6 adres toegewezen. De browser maakt nog wel verbinding met de proxy server, maar deze moet opnieuw gestart worden om verbinding met internet te kunnen maken. Een ingeplande taak zorgt er nu voor dat de service (van de proxy server) elke nacht stopt en meteen daarna opnieuw opstart. Zo is de proxy server dagelijks bereikbaar. Onder het kopje Algemeen geef je een naam op voor de taak en met welke machtiging (type gebruiker) de taak moet worden uitgevoerd. Onder het kopje Planning is het schema in te stellen. Bij het kopje Taakinstellingen kun je aangeven welke services moeten worden gestopt en/of gestart.

schermafdruk servicetaak aanmaken

Je kunt natuurlijk ook andere service stoppen of starten zoals Windows-bestandsservice, FTP, automatisch blokkeren, enz.

Of om een zelf gemaakt script uit te laten voeren

Er zijn ook taken die niet in het voorgeschreven rijtje van services of andere door Synology voorbereide taken zijn weergegeven. Gelukkig biedt Synology de mogelijkheid om zelf geschreven scripts te laten inplannen die door de gebruiker zelf zijn gedefinieerd.

Laten we als voorbeeld kijken naar het synchroniseren van bestanden tussen de NAS en een USB harde schijf die aan de NAS gekoppeld is. Synology biedt een pakket hiervoor, namelijk ‘USB Copy’. Dit pakket heeft echter als nadeel dat je slechts één gedeelde map kunt synchroniseren. Wil je meer mappen laten repliceren, dan is dat niet mogelijk. Dit moet beter kunnen.

Met een rsync script kun je op snelle en betrouwbare wijze een back-up maken van bestanden. In het onderstaande voorbeeld nemen we de map dropbox ter illustratie. Met het onderstaande uitvoeringsscript worden de bestanden gesynchroniseerd tussen de dropbox map op de Hoofdmap van de NAS met de dropbox-map op de USB schijf. De toelichting bij het script volgt verderop.

rsync -ar --delete --max-size='1000M' --ignore-existing --stats /volume1/mappenstructuur/Dropbox/ /volumeUSB1/mappenstructuur/Dropbox

Om het script als terugkerende taak door de NAS te laten uitvoeren, dient het bestand te worden opgeslagen met de extensie ‘.sh’. Vervolgens voer je in het uitvoeringsvenster waarin de taakdetails worden gevraagd (zie figuur 3 hieronder) de naam van het script bestand op, voorafgegaan door de opdracht ‘sh’.

schermafdruk Ingeven van taakinstellingen
Figuur 3 Ingeven van taakinstellingen

 

Het script voer je dus uit met het commando  sh /mappenstructuur/bestand.sh. Om het te testen maak je een map ‘Cron’ aan in de map “volume1” (volume1/cron) met WinSCP (zie inloggen op het besturingssysteem). Geef het script een naam en verwijs hiernaar, inclusief het pad, via het venster ‘Opdracht uitvoeren’.

Toelichting bij rsync

Het commando rsync omvat de opdracht om de backup in gang te zetten. De optie ‘–ignore-existing’ vertelt dat de bestanden die reeds op de USB backup bestaan, genegeerd kunnen worden. De betreffende bestanden worden niet van de NAS opgehaald en naar de USB schijf gekopieerd wat dus tijd scheelt.

De optie ‘-a’ informeert rsync om de backup in archiveringsmodus uit te voeren met behoud van de directory structuur, inclusief de symbolische links, de bestandsmachtigingen, het eigenaarschap en de tijdstempels (wijzigingsdatum bestand). De optie ‘delete’ zorgt ervoor dat bestanden op de USB schijf verwijderd worden wanneer deze ook op de NAS verwijderd zijn. Met de optie ‘-q’ geef je aan dat het script geen logbestand hoeft bij te houden van alle handelingen die worden uitgevoerd zoals het openen en opslaan van bestanden. De optie ‘-r’ bepaalt dat de onderliggende mappen, inclusief bestanden, onderdeel zijn van de backup. Met de optie ‘–stats’ worden de belangrijkste kwantitatieve kenmerken van de backup getoond zoals het aantal gekopieerde bestanden.

Zelf notificaties via email instellen in het script

Bij elke taak kunnen de uitvoerdetails via email toegestuurd worden. Dat is handig om na te gaan waar fouten zijn opgetreden en om deze te verhelpen. Nu kent Synology een beperking ten aanzien van de omvang van de e-mailmelding. Als deze melding een omvang heeft die groter is dan 1MB, dan wordt de email niet verstuurd. Een verklaring hiervoor geeft Synology niet. Dit valt echter te omzeilen door in het script op te nemen dat de uitvoeringsdetails per email kunnen worden verzonden. Hiervoor neem je in het script een commando op die de mail transfer agent aanroept.

Een statische kopie van je website maken

Als voorbeeld tonen we een script om een statische kopie te maken van een website. Dit heet ook wel ‘mirroring’, een soort van back-up van een website doch zonder dynamische faciliteiten zoals het geven van reacties, inloggen of het plaatsen van berichten. We tonen hieronder een mirroring script ter illustratie. Hierbij worden de uitvoeringsdetails per email verstuurd met behulp van de opdrachtcommando’s sendmail en wget.

cd /volume1/mappenstructuur/backup_xyz
wget -mkprv --no-hsts --user-agent=Mozilla --adjust-extension --restrict-file-names=windows -e robots=off -P ./naam_bestand https://www.domeinnaam.nl -e use_proxy=on -e http_proxy=192.168.1.xxx:yyy 2&1 | tee log_bestand.txt
chown -R eigenaar:groep /volume1/mappenstructuur/backup_xyz
echo "Subject: Log mirror website domeinnaam.nl" | cat - log_bestand.txt | sendmail -F Naam_afzender -f afzender_emailadres -t ontvanger_emailadres

Het commando wget is een programma voor het downloaden van bestanden van internet. Een grafische interface ontbreekt evenals beheerfuncties maar dat mag de pret niet drukken. Het werkt snel en zonder verdere tussenkomst van de gebruiker kan ’s nachts een kopie van de website worden gemaakt. Wget is ook nuttig voor andere toepassingen, zoals het opvragen en converteren van html links voor advanced analytics doeleinden of webscraping.

Toelichting bij wget en sendmail

De toegepaste wget opties in het mirror-script zijn:

  • -m staat voor ‘mirror’ en houdt in dat een statische kopie wordt gemaakt van de betreffende website.
  • -k staat voor het het converteren van de links in de opgehaalde pagina’s zodat deze lokaal (op de PC) de website kan worden bekeken.
  • -p schrijft voor om eveneens die bestanden op te halen die nodig zijn om de pagina goed leesbaar in html af te beelden.
  • -v geeft een toelichting welke stappen zijn gevolgd en wat de resultaten per stap zijn. De v staat voor verbose en betekent zoiets als ‘vol van woorden’. Per opgehaalde link is aangegeven of de link bereikbaar is en of de pagina is opgehaald. Ook de foutmeldingen worden met de verbose optie weergegeven.
  • -P is nodig om de map aan te duiden waaronder de kopie van de website moet worden opgeslagen.
  • De optie ‘–user-agent=Mozilla’ laat wget zich identificeren als een gebruiker met de browser Mozilla Firefox.
  • Met behulp van de optie ‘–restrict-file-names=windows’ wordt het aantal karakters beperkt van de archiefbestanden tot veilige karakternamen die voor Windows kunnen worden gebruikt.
  • Met –no-hsts wordt de toepassing van http strict transport security uitgezet. Gebruik deze optie om wget te laten functioneren als een non-HSTS-compliant web gebruiker. Als gevolg hiervan negeert wget alle Strict-Transport-Security headers, en zal deze hsts beleid terzijde leggen. Minder veilig dus. Laat je wget wel met hsts werken, zorg er dan voor dat de .wget-hsts database schrijfbaar is (machtigingseigenschappen 644). Deze database zit in de map van de account die de taak uitvoert.
  • -r geeft aan dat de backup zo wordt gemaakt dat dezelfde mappenstructuur ontstaat zoals ook op de webserver aanwezig is.
  • –adjust-extension maakt het mogelijk om webpagina’s in een ander format dan html (asp, cgi, xml) toch te kunnen zien in html.
  • de optie ‘-e use_proxy=on’ en ‘-e http_proxy=192.168.1.xxx:yyy’ vertellen wget om gebruik te maken van een proxy server. De bestanden worden in de cache van de proxy server bewaard en zijn daarmee sneller beschikbaar voor wget. Het is niet echt nodig, gezien het glasvezelinternet van tegenwoordig maar het is geinig om te kijken of het werkt. De aanduiding ‘yyy’ slaat op het poortnummer waaronder proxy bereikbaar is. De aanduiding ‘xxx’ duidt de laatste cijfers aan van het interne IP-adres van de proxy server.
  • ‘-e robots=off’ voorkomt dat wget gebruik maakt van het robots.txt bestand. Met dit bestand geeft de webserver aan hoe de website doorzocht moet worden en welke links opgevraagd kunnen worden. Het is ook een middel om overbelasting van de website te voorkomen door bepaalde vormen van webscraping te voorkomen. Verder laat deze optie toe dat wget de webpagina’s met rel=nofollow attribuut wel kan volgen. Met de optie ‘-e robots=off’  negeert wget derhalve het robots.txt bestand en de no-follow richtlijnen.

Het versturen van een email door de console zelf kan plaatsvinden via het opdrachtcommando sendmail. In het script wordt met de opdracht cat het logbestand (log_bestand.txt) ingelezen waarna deze door de opdracht sendmail wordt verstuurd. De opdracht sendmail maakt gebruik van de mail transfer agent die je zelf hebt ingesteld in de NAS voor het versturen van meldingen.

Bijgaand de gehanteerde opties bij het gebruik van sendmail:

  • -v staat voor verbose en legt uitgebreid de logging vast van wat er gebeurt
  • -F duidt op de naam van de afzender
  • -f staat voor het email-adres van de afzender
  • -t geeft het email-adres van de ontvanger aan

Met dit script ontvang je niet alleen een kopie van de website in je lokale map. Je verkrijgt daarnaast een melding via de email functionaliteit van de NAS die door de console zelf wordt aangeroepen.

Automatische herstart van de Fritzbox router

Wat is een huis tegenwoordig zonder router? De router schakelt het netwerkverkeer tussen de apparaten en geeft toegang tot het internet. Toch wil een router nog wel eens vastlopen. Het gebeurt niet vaak, maar eens in de paar maanden moet ik de Fritzbox router van Freedom Internet herstarten. Dit kan automatisch met behulp van een script in taakplanner.

Met een aangepast script kun je de Fritzbox router laten herstarten met een opdracht die de NAS aan de router geeft. Net zoals in voorgaande voorbeelden kun je zelf kiezen hoe vaak per week de taak moet worden uitgevoerd, waar het script moet worden opgehaald en of je een melding wilt krijgen via de email push service. Neem deze code op in een shell bestand (extensie *.sh) en plaats dit in een werkmap.

#!/bin/sh

cd /volume1/naar/werk/map

TMP_FILE=/volume1/naar/werk/map/inet_up_router.txt

echo “” > $TMP_FILE

no_int_action() {

(sleep 12 && curl -k -v -m 5 -6 –anyauth -u “gebruiker:wachtwoord” http://[ipv6-adres-van-modem]:49000/upnp/control/deviceconfig -H ‘Content-Type: text/xml; charset=”utf-8″‘ -H ‘Cache-Control: no-cache, no-store’ -H “SoapAction:urn:dslforum-org:service:DeviceConfig:1#Reboot” -d “<?xml version=’1.0′ encoding=’utf-8′?<s:Envelope s:encodingStyle=’http://schemas.xmlsoap.org/soap/encoding/’ xmlns:s=’http://schemas.xmlsoap.org/soap/envelope/’><s:Body><u:Reboot xmlns:u=’urn:dslforum-org:service:DeviceConfig:1′></u:Reboot></s:Body></s:Envelope>” -s 2&1 | tee -i -a $TMP_FILE) && (sleep 120 && id=$(wget -q –no-cache -O- –http-user admin –http-password wachtwoord http://ipv4-adres-van-router/ADVANCED_home2.htm | perl -lne ‘/id=([a-f0-9]+)/ && print $1’ 2>&1 | tee -i -a $TMP_FILE); wget -O- –no-cache –http-user admin –http-password wachtwoord http://ipv4-adres-van-router/newgui_adv_home.cgi?id=$id –post-data “id=$id&buttonType=2” 2&1 | tee -a -i $TMP_FILE)

}

if ping -c5 -i2 1.1.1.1; then # test internet connectiviteit door cloudfare DNS server te pingen
(echo “Internet verbinding naar router en modem is OK” >> $TMP_FILE)

else # herstart de router en email een bericht hierover
(echo “Geen internet verbinding naar router en modem. Herstart van router en modem is begonnen.” >> $TMP_FILE && echo -e “Content-Type: text/plain;charset=UTF-8\r\nTo: <email-adres>\r\nMIME-Version: 1.0\r\nContent-Description: Delivery report\r\nContent-Transfer-Encoding: 7bit\r\nSubject: Rapport herstart routers\r\n\r\nDit is het logbericht van de herstart van beide routers\r\n” | cat – $TMP_FILE | sendmail -F DS923_sendmail_service -f verzendend-email-adres -t ontvangend-email-adres) && no_int_action
fi

 

Het draaien van het script op de Fritzbox vereist een aanpassing in de instellingen. Maak een gebruiker aan met een wachtwoord. De gebruikersnaam en het wachtwoord dienen in het script overgenomen te worden op de rood gemarkeerde code-delen.

Fritzbox router settings menu user

Daarnaast moet het script toegelaten worden tot het operating system van de router. Hiertoe vink je de optie aan ‘allow access for applications’. Het script heeft nu toegang en kan de instellingen van de router aanpassen.

fritzbox settings to allow access for applications

Op deze wijze is de router elke dag (stel dat je deze taak dagelijks inplant) gereed voor een frisse start!

Met bovenstaande shell-commando’s start de router opnieuw op.

Inmiddels heb ik het script_herstart_modem_router zo aangepast dat zowel het Fritzbox modem als de Netgear router herstarten wanneer de internet verbinding uitvalt. Het script is hier te downloaden. Het bestaat uit een functie om te testen of er verbinding is met het internet. Vervolgens wordt een functie aangeroepen die in het geval van geen verbinding met internet, eerst het modem herstart en vervolgens de router.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *