Synology NAS – Taakplanner per seconde of minuut (Python)
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 Python 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 hoevaak 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):
Wat heb je nodig?
1) WinSCP
2) Python
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 |
#!/usr/bin/python # Bibliotheek voor tijdfuncties. (time.sleep) import time # [INSTELLINGEN] # hoeveel keer per uur moet het script 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 # 10 = elke 10 minuten # 4 = elk kwartier # 2 = elk half uur keerperuur=1800 wachttijd=(3600 / keerperuur) teller=1 while (teller <= keerperuur): print 'De wachttijd staat op', wachttijd, 'seconden dit is', teller, '/', keerperuur # # SCRIPT HIER # time.sleep(wachttijd) teller = teller + 1 |
Als je via telnet inlogt, kun je het script testen:
1 2 3 4 5 6 7 8 9 |
python /volume1/cron/minicron.py 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 |
#!/usr/bin/python # Bibliotheek voor tijdfuncties. (time.sleep) import time # Bibliotheek om een proces buiten dit script te starten. (subprocess.call) import subprocess # [INSTELLINGEN] # hoeveel keer per uur moet het script 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 # 10 = elke 10 minuten # 4 = elk kwartier # 2 = elk half uur keerperuur=4 wachttijd=(3600 / keerperuur) teller=1 while (teller <= keerperuur): # subprocess.call(['php', '/volume1/web/script.php'], shell=False) # time.sleep(wachttijd) teller = teller + 1 |
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: python /volume1/cron/minicron.py [aantal x per uur] [programma] [opdracht parameters]
Voorbeeld: python /volume1/cron/minicron.py 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 28 29 30 |
#!/usr/bin/python # Bibliotheek om commandolijn argumenten uit te lezen. (sys.argv[1]) import sys # Bibliotheek voor tijdfuncties. (time.sleep) import time # Bibliotheek om een proces buiten dit script te starten. (subprocess.call) import subprocess # [INSTELLINGEN] # hoeveel keer per uur moet het script 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 # 10 = elke 10 minuten # 4 = elk kwartier # 2 = elk half uur keerperuur=int(sys.argv[1]) wachttijd=(3600 / keerperuur) teller=1 while (teller <= keerperuur): # subprocess.call([sys.argv[2], sys.argv[3]], shell=False) # time.sleep(wachttijd) teller = teller + 1 |