synology-api
synology-api copied to clipboard
[Feature Request] Implement TaskScheduler API
Is your feature request related to a problem? Please describe. Want to enable/disable and run tasks via script.
Due to poorly conceived IPv6 support in DSM 7.x I want to run a script every minute after reboot, but only up to 15 minutes. So a reboot script will enable that task (planned minutely) and schedule another task in 15 mins to disable it again.
Describe the solution you'd like Using the API for Task Scheduler
Describe alternatives you've considered Schedules running every 5 mins to check for executing specific scripts, but this will not let NAS go into a deeper sleep mode. Wasting energy.
Additional context Did not find much about the TaskScheduler API, but there is some information to get a hold on it. I assume you are more experienced to find out API parameters than I.
- Task Scheduler
- Task information via command
- /usr/syno/bin/synoschedtask
- Possible APIs
- SYNO.Core.TaskScheduler & SYNO.Core.TaskScheduler.Root
- Description:
/usr/bin/jq . /usr/syno/synoman/webapi/SYNO.Core.TaskScheduler.lib
(JSON with methods, unfortunately without parameters)
- used in (via
grep -Rl -i -e 'SYNO.Core.TaskScheduler' /usr/syno
):- /usr/syno/synoman/webman/modules/AdminCenter/admin_center.js
- /usr/syno/synoman/webman/modules/TaskSchedulerWidget/TaskSchedulerWidget.js
- /usr/syno/synoman/webman/modules/TaskSchedulerUtils/TaskSchedulerUtils.js
- Other information (exposing some parameters):
- https://www.exploit-db.com/exploits/43474
- https://www.reddit.com/r/synology/comments/18kl287/api_access_issues_with_dsm7_via_php_script/
- Script recommendations: https://kb.synology.com/en-us/DSM/tutorial/common_mistake_in_task_scheduler_script
- Task information via command
P.S.: Already used APIs locally via script to import renewed certficates, that were done on another machine. See https://github.com/maddes-b/synology-nas-tools
Played around on current DSM 7.2
API SYNO.Core.TaskScheduler
= Method list
- Max Version: 3
- Min Version: 1
- Parameters v3
- none (admin_center.js, TaskSchedulerWidget.js)
- Testing
-
/usr/syno/bin/synowebapi --exec-fastwebapi api="SYNO.Core.TaskScheduler" method="list" version="3"
-
- Task name to ID:
-
<api call> | /usr/bin/jq -r --arg name "${TASKNAME}" '.data.tasks[] | select( .name == $name ) | .id'
-
= Method get
- Max Version: 4
- Min Version: 1
- Parameters v4
-
id
(TaskSchedulerUtils.js) -
real_owner
(TaskSchedulerUtils.js)
-
- Testing
-
/usr/syno/bin/synowebapi --exec-fastwebapi api="SYNO.Core.TaskScheduler" method="get" version="4"
-
= Method set_enable
- Max Version: 2
- Min Version: 1
- Parameters v2
-
status
array (admin_center.js)- fields:
id
,real_owner
,enable
(admin_center.js)
- fields:
-
- Testing
-
/usr/syno/bin/synowebapi --exec-fastwebapi api="SYNO.Core.TaskScheduler" method="set_enable" version="2"
-
= Method delete
- Max Version: 2
- Min Version: 1
- Parameters v2
-
tasks
array (admin_center.js)- fields:
id
,real_owner
(admin_center.js)
- fields:
-
- Parameters v1
-
task
array (Metasploit)
-
- Testing
-
/usr/syno/bin/synowebapi --exec-fastwebapi api="SYNO.Core.TaskScheduler" method="delete" version="2"
-
= Method run
- Max Version: 2
- Min Version: 1
- Parameters v2
-
tasks
array (admin_center.js)- fields:
id
,real_owner
(admin_center.js)
- fields:
-
- Parameters v1
-
task
array (Metasploit)
-
- Testing
-
/usr/syno/bin/synowebapi --exec-fastwebapi api="SYNO.Core.TaskScheduler" method="run" version="2"
-
= Method set
- Max Version: 4
- Min Version: 1
- Parameters v4
- TODO: TaskSchedulerUtils.js - backtrace hClickOK2() e < hClickOK() s
= Method create
- Max Version: 4
- Min Version: 1
- Parameters v4
- TODO: TaskSchedulerUtils.js - backtrace hClickOK2() e < hClickOK() s
- Parameters v2
-
name
,owner
,enable
,schedule
array,extra
array,type
(Metasploit)
-
= Method view
- Max Version: 1
- Min Version: 1
= Method get_history_status_list
- Max Version: 1
- Min Version: 1
- Parameters v1
-
id
(admin_center.js)
-
- Testing
-
/usr/syno/bin/synowebapi --exec-fastwebapi api="SYNO.Core.TaskScheduler" method="get_history_status_list" version="1"
-
= Method get_history_log
- Max Version: 1
- Min Version: 1
- Parameters v1
-
id
(admin_center.js) -
timestamp
(admin_center.js)
-
- Testing
-
/usr/syno/bin/synowebapi --exec-fastwebapi api="SYNO.Core.TaskScheduler" method="get_history_log" version="1"
-
API SYNO.Core.TaskScheduler.Root
- Used to create/change tasks with owner root (TaskSchedulerUtils.js).
= Method set
- Max Version: 4
- Min Version: 1
- Parameters v4
- same as for SYNO.Core.TaskScheduler
= Method create
- Max Version: 4
- Min Version: 1
- Parameters v4
- same as for SYNO.Core.TaskScheduler
Nice! I will look into it!