Synology NAS – Taakplanner per seconde of minuut (Bash)
Op een Synology NAS is het niet mogelijk om een taak uit te laten voeren om een seconde laat staan een minuut, daarvoor heb ik dit Bash script in elkaar gezet, je kan dit script laden in de taakplanner van je NAS en 1x per uur laten uitvoeren, zodra het script (1x per uur) uitgevoerd wordt, kan je in het script zelf instellen hoe vaak een commando per uur uitgevoerd moet worden.
Ps. sinds DSM update DSM 5.2-5565 is het mogelijk om een CRON in te stellen per minuut (i.p.v. uur) alleen is dit maar gedurende 1 uur op een dag:
Wat heb je nodig?
1) WinSCP
Het script
1) Maak een folder aan in “volume1” genaamd “cron” op de Synology NAS.
2) Plaats daarin dit script:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#!/bin/bash # [INSTELLINGEN] # hoeveel keer per uur moet het commando uitgevoerd worden? # 3600 = elke 1 seconde # 1800 = elke 2 seconden # 720 = elke 5 seconden # 360 = elke 10 seconden # 120 = elke 30 seconden # 60 = elke minuut # 4 = elk kwartier keerperuur=1800 # we delen het aantal seconden in een uur door het aantal keer # per uur dat het script uitgevoerd moet worden. # calculaeren in BASH kan alleen worden gebruikt met 'expr'. timer=$(expr 3600 / $keerperuur) teller=1 # het symbool <= werkt niet dus we gebruiken -le 'less than or equal to'. while [ $teller -le $keerperuur ] do echo "De wachttijd staat op" $timer "seconden dit is" $teller "/" $keerperuur teller=$((teller+1)) sleep $timer done |
Als je via telnet inlogt, kun je het script testen:
1 2 3 4 5 6 7 8 9 |
sh /volume1/cron/minicron.sh De wachttijd staat op 2 seconden dit is 1 / 1800 De wachttijd staat op 2 seconden dit is 2 / 1800 De wachttijd staat op 2 seconden dit is 3 / 1800 De wachttijd staat op 2 seconden dit is 4 / 1800 De wachttijd staat op 2 seconden dit is 5 / 1800 De wachttijd staat op 2 seconden dit is 6 / 1800 De wachttijd staat op 2 seconden dit is 7 / 1800 De wachttijd staat op 2 seconden dit is 8 / 1800 |
Voorbeeld PHP script dat om het kwartier uitgevoerd wordt
Dit is een voorbeeld van een php script dat om het kwartier uitgevoerd wordt (bijvoorbeeld wegschrijven van data naar een database)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#!/bin/bash # [INSTELLINGEN] # hoeveel keer per uur moet het commando uitgevoerd worden? # 3600 = elke 1 seconde # 1800 = elke 2 seconden # 720 = elke 5 seconden # 360 = elke 10 seconden # 120 = elke 30 seconden # 60 = elke minuut # 4 = elk kwartier keerperuur=4 # we delen het aantal seconden in een uur door het aantal keer # per uur dat het script uitgevoerd moet worden. # calculaeren in BASH kan alleen worden gebruikt met 'expr'. timer=$(expr 3600 / $keerperuur) teller=1 # het symbool <= werkt niet dus we gebruiken -le 'less than or equal to'. while [ $teller -le $keerperuur ] do # '/dev/null 2>&1' geeft niets weer op de commandolijn $( php /volume1/web/script.php > /dev/null 2>&1 ) teller=$((teller+1)) sleep $timer done |
Universeel script voor minicron
Als je met commandolijn parameters werkt maak je het script universeel en flexibel, zo kun je dit “timer” minicron script gebruiken voor meerdere toepassingen.
Gebruik: sh /volume1/cron/minicron.sh [aantal x per uur] [programma] [opdracht parameters]
Voorbeeld: sh /volume1/cron/minicron.sh 360 php /volume1/web/script.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#!/bin/bash # [INSTELLINGEN] # hoeveel keer per uur moet het commando uitgevoerd worden? # 3600 = elke 1 seconde # 1800 = elke 2 seconden # 720 = elke 5 seconden # 360 = elke 10 seconden # 120 = elke 30 seconden # 60 = elke minuut # 4 = elk kwartier keerperuur=$1 # we delen het aantal seconden in een uur door het aantal keer # per uur dat het script uitgevoerd moet worden. # calculaeren in BASH kan alleen worden gebruikt met 'expr'. timer=$(expr 3600 / $keerperuur) teller=1 # het symbool <= werkt niet dus we gebruiken -le 'less than or equal to'. while [ $teller -le $keerperuur ] do # '/dev/null 2>&1' geeft niets weer op de commandolijn $( $2 $3 ) > /dev/null 2>&1 teller=$((teller+1)) sleep $timer done |