NAS-script: Check ping – Versie 1.0

Status: Dit is de laatste versie van dit script.

Beschrijving

Van sommige apparaten in je netwerk, wil je met zekerheid weten dat ze nog in leven zijn. Denk bijvoorbeeld aan je thuis-automatisering (Home Assistant, Domoticz, etc.), maar bijvoorbeeld ook extra wifi-versterkers. Het uitvallen van dit soort apparaten kan onverwachts gedrag tot gevolg hebben. En het niet duidelijk hebben dat er wat aan de hand is, kan ervoor zorgen dat je lang bezig bent om uit te dokteren wat er precies loos is.

Het script voert een eenvoudige ping-test uit op alle opgegeven hosts/IP-adressen. Standaard worden hierbij 5 packages verstuurd, en standaard daarbij mag er ééntje verloren gaan om de test succesvol te laten zijn (deze twee waardes zijn aan te passen). Wanneer er te veel packages verloren gaan, wordt de test als onsuccesvol gezien en wordt er een notificatie-mail uitgestuurd.

Code

# Steenderen.NET
# NAS-script: Check ping - Versie 1.0

#!/bin/bash
IFS="`printf '\n\t'`"

# Setup.
HOSTS_TO_PING=(192.168.1.x 192.168.1.y) # Enter multiple hosts seperated by a space.
PINGS_TO_DO=5
PINGS_MAX_LOST=1

MAIL_FROM="mail@provider.com"
MAIL_TO="mail@provider.com" # Enter multiple adresses seperated by a comma.
MAIL_SUBJECT="Ping-probleem geconstateerd"
MAIL_BODY_START="Beste gebruiker,\n\nOp onderstaand IP-adres is een probleem geconstateerd bij het uitvoeren van de ping-test."
MAIL_BODY_PINGED_HOST="IP-adres"
MAIL_BODY_PING_RESULT="Testresultaat"
MAIL_BODY_END="Controleer of het apparaat aanstaat, de netwerkkabel is verbonden, etc."
MAIL_SIGNATURE="Met vriendelijke groeten,\nSynology DiskStation"

# No need to edit below here.
echo "Start running Ping check script."

for MY_HOST in "${HOSTS_TO_PING[@]}"
do
  PINGS_RECEIVED=$(ping -c $PINGS_TO_DO $MY_HOST | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }')

  # Check that the number of received pings is not less than (-lt) the pings to do minus the max lost pings
  if [ $PINGS_RECEIVED -lt $(expr $PINGS_TO_DO - $PINGS_MAX_LOST) ]; then
	echo "- Pinged $MY_HOST, $PINGS_TO_DO packages sent, $PINGS_RECEIVED were received => NOT OK"
	/usr/bin/php -r 'mail("'$MAIL_TO'", "'$MAIL_SUBJECT'", "'$MAIL_BODY_START'\n\n'$MAIL_BODY_PINGED_HOST': '$MY_HOST'\n'$MAIL_BODY_PING_RESULT': '$PINGS_TO_DO' packages sent, '$PINGS_RECEIVED' received.\n\n'$MAIL_BODY_END'\n\n'$MAIL_SIGNATURE'", "From: '$MAIL_FROM'");';
	echo "- Notification e-mail for $MY_HOST was sent out."
	/usr/syno/bin/synologset1 sys info 0x11100000 "Ping check for $MY_HOST failed ($PINGS_TO_DO packages sent, $PINGS_RECEIVED were received), notification e-mail was sent out";
  else
    echo "- Pinged $MY_HOST, $PINGS_TO_DO packages sent, $PINGS_RECEIVED were received => OK"
  fi
done

# Done!
echo "Done running Ping check script."

Installatie-instructies

Sla het script op in een nieuw bestand met de naam check_ping.sh en plaats deze op.

Vul in het script, onder #Setup, als eerste de te pingen hosts/ip-adressen in. Meerdere adressen scheid je met een spatie ertussen. En vul vervolgens ten minste de eerste twee variabelen in m.b.t. de te verzenden notificatie e-mails.

Plan het script in om dagelijks te draaien (of meerdere keren per dag als je daar behoefte aan hebt natuurlijk) via de Taakplanner in het Configuratiescherm van je NAS. Ik heb ‘m zelf om 23:58 uur draaien, omdat ik de verschillende taken die rond die tijd gepland staan niet allemaal op hetzelfde moment wil laten starten.

Let er bij het inplannen op dat je het volledige pad gebruikt naar de locatie waar je het script het opgeslagen, dit is bijvoorbeeld /volume1/beheer/check_ping.sh. Mocht je twijfelen, dan kan je dit controleren (of zelfs het volledige pad kopieeren) door in File Station het bestand op te zoeken, via de rechter muisknop de eigenschappen (Properties) op te vragen, en te kijken in het veld Location.

Geef een reactie

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

Deze site gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie-gegevens worden verwerkt.