Synology NAS – Scripts via de taakplanner
Op de Synology kan je via de Taakplanner diverse script op een bepaalde tijd en/of datum laten uitvoeren, ik heb hier een paar voorbeelden op een rij gezet voor o.a. Bash, PHP en Python.
Wat heb je nodig?
1) WinSCP
Hieronder een voorbeeld en schermafdrukken uitgevoerd op DSM 5.x
1) Via Control Panel > Task Scheduler kun je een eigen script toevoegen om uit te laten voeren:
Taken toevoegen
2) Je kan de taaknaam opgeven, de “gebruiker” die hem uitvoerd en in het veld kun je dus een “commandolijn” opgeven dat in Linux uitgevoerd wordt:
3) In de TAB “Schedule” kun je de planning instellen:
BASH script uitvoeren
Een BASH script kun je uitvoeren met: sh /pad/naar/bestand.sh
Om het te testen kun je het volgende proberen:
1) Maak een folder aan “cron” in de map “volume1” (volume1/cron) met WinSCP.
2) Maak een bestand aan “test.sh” met deze inhoud
1 |
echo "Hallo wereld!" > "/volume1/cron/leesmij.txt" |
3) Voeg de taak toe
4) Klik op OK
5) En start de taak met RUN
Als het goed is gegaan, verschijnt er een bestandje “leesmij.txt” in volume1/cron met de inhoud “Hallo wereld!“.
PHP script uitvoeren
Een PHP script kun je uitvoeren met:
1a) DSM 5.x: php /pad/naar/bestand.php
1b) Met pad op DSM 5.x: /usr/bin/php /pad/naar/bestand.php
met commando opties op de commandline:
1c) DSM 6.x: php56 /pad/naar/bestand.php
2) php /pad/naar/bestand.php commando1 commando2 etc
Om het te testen kun je het volgende uitvoeren:
1) Om php scripts buiten de standaard gedefinieerde folders (open_basedir) uit te voeren moet je de “volume1/cron” folder toevoegen aan de open_basedir:
Ga naar > Control Panel > Web Services > TAB PHP Settings en voeg aan de open_basedir toe:
:/volume1/cron
en klik op Apply!
2) Maak een folder aan “cron” in de map “volume1” (volume1/cron) met WinSCP.
3) Maak een bestand aan “test.php” met deze inhoud
1 2 3 4 5 6 |
<?php chdir("/volume1/cron"); $bestand = fopen("/volume1/cron/leesmij.txt", "w"); fwrite($bestand, "Hallo wereld!"); fclose($bestand); ?> |
4) Voeg de taak toe ( php /volume1/cron/test.php ) en start deze.
Als het goed is gegaan, verschijnt er een bestandje “leesmij.txt” in volume1/cron met de inhoud “Hallo wereld!“.
Python script uitvoeren
Een Python script kun je uitvoeren met:
1a) python /pad/naar/bestand.py
1b) Met pad op DSM 5.x: /usr/bin/python /pad/naar/bestand.py
met commando opties op de commandline:
2) python /pad/naar/bestand.py commando1 commando2 etc
Om het te testen kun je het volgende uitvoeren:
1) Maak een folder aan “cron” in de map “volume1” (volume1/cron) met WinSCP.
2) Maak een bestand aan “test.py” met deze inhoud
1 2 3 |
file = open("/volume1/cron/leesmij.txt", "w") file.write("Hallo wereld!") file.close() |
4) Voeg de taak toe ( python /volume1/cron/test.py ) en start deze.
Als het goed is gegaan, verschijnt er een bestandje “leesmij.txt” in volume1/cron met de inhoud “Hallo wereld!“.
Waar worden deze CRON JOBS opgeslagen?
Als je de taakplanner van de synology gebruikt, worden de taken opgeslagen in het bestand: DSM 4.2 /etc/crontab , de inhoud ziet er bijvoorbeeld zo uit:
1 2 3 4 5 6 |
#minute hour mday month wday who command 21 1 * * 2,5 root /usr/syno/bin/synopkg chkupgradepkg 0 1 * * 0,2,4,6 root /tmp/synoschedtask --run id=1 20 1 * * 0,4 root /tmp/synoschedtask --run id=3 40 1 * * 0,4 root /tmp/synoschedtask --run id=4 7 23 17 12 * root /tmp/synoschedtask --run id=2 |
De TAAK ID’s kun je weervinden in de bestanden:
DSM 4.2: /usr/syno/etc/scheduled_tasks en/of /tmp/scheduled_tasks
Deze zien er ongeveer zo uit:
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 |
Taak ID" >[1] id=1 last work hour=1 can edit owner=1 can delete from ui=1 edit dialog=SYNO.SDS.TaskScheduler.EditDialog type=weekly action=#common:run#: sh /volume1/cron/mysql-backups.sh can edit from ui=1 week=1010101 app name=#common:command_line# name=mysql-backups can run app same time=1 owner=0 simple edit form=1 repeat hour=0 listable=1 app args={"script":"sh /volume1/cron/mysql-backups.sh"} state=enabled can run task same time=0 start day=0 cmd=c2ggL3ZvbHVtZTEvY3Jvbi9teXNxbC1iYWNrdXBzLnNo run hour=1 edit form=SYNO.SDS.TaskScheduler.Script.FormPanel app=SYNO.SDS.TaskScheduler.Script run min=0 start month=0 can edit name=1 start year=0 can run from ui=1 |
De taak ID’s kun je ook laten weergeven als je met PuTTy op de commandolijn zit, dit doe je met het commando: synoschedtask --get id=1