Scheduler

MikroTik RouterOS 调度器支持按时间执行脚本,可精确控制任务运行的时间和频率。它支持基于间隔或一次性的执行,具有开始时间、间隔时长和脚本事件名称等属性。

调度器

概述

调度器可以在特定时间点、在指定时间间隔之后,或两者同时触发脚本执行。

属性

属性描述
days (always | sun | mon | tue | wed | thu | fri | sat; Default: always)任务可以运行的星期几。用逗号分隔多个日期(例如 mon,wed,fri)。使用 always 每天运行。
interval (time; Default: 0s)两次脚本执行之间的间隔。当设置为零时,脚本仅在开始时间运行一次。
name (string; Default: )任务名称。
on-event (string; Default: )要执行的脚本。
policy (ftp | reboot | read | write | policy | test | password | sniff | sensitive | romon; Default: )应用于计划脚本的策略,控制执行期间的权限。
start-date (date; Default: )首次脚本执行的日期。
start-time (time | startup; Default: )首次脚本执行的时间。使用 startup 在系统启动 3 秒后执行。
run-count (read-only: integer)脚本每次运行时递增的计数器。重启时重置。

注意

重启路由器将重置 run-count 计数器。

如果必须同时执行多个脚本,它们将按在调度器配置中出现的顺序执行。如果一个计划脚本用于禁用另一个脚本,这一点可能很重要。

如果需要更复杂的执行模式,通常可以通过调度多个脚本,并让它们互相启用和禁用来实现。

当同时设置了 days、特定的 start-time 和 interval 时,任务将在匹配日期上于指定开始时间启动,并以给定间隔重复,直到当天结束。

说明

如果调度器条目的 start-time 设置为 startup,其行为如同 start-time 和 start-date 设置为控制台启动后 3 秒的时间。具有 start-time=startup 和 interval=0 的脚本将在每次路由器启动时执行一次。如果 interval 设置为非 0 值,调度器不会在启动时运行。

示例

我们将添加一个每小时执行脚本 log-test 的任务:

[admin@MikroTik] /system/script> add name=log-test source=":log info message=test" 
[admin@MikroTik] /system/script> print 
Flags: I - invalid 
0 name="log-test" owner="admin" policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon dont-require-permissions=no run-count=0 
source=:log info message=test 
[admin@MikroTik] /system/script> .. /scheduler 
[admin@MikroTik] /system/scheduler> add name=run-1h interval=1h 
on-event=log-test 
[admin@MikroTik] /system/scheduler> print 
Flags: X - disabled 
# NAME ON-EVENT START-DATE START-TIME INTERVAL RUN-COUNT 
0 run-1h log-test 2004-03-30 06:11:35 1h 0 
[admin@MikroTik] /system/scheduler>

以下示例仅在工作日运行任务:

[admin@MikroTik] /system/script> add name=business-log source=":log info message=workday"
[admin@MikroTik] /system/script> .. scheduler
[admin@MikroTik] /system/scheduler> add name=workday-task interval=1d on-event=business-log days=mon,tue,wed,thu,fri start-time=8:00:00
[admin@MikroTik] /system/scheduler> print
Flags: X - disabled
# NAME ON-EVENT START-DATE START-TIME INTERVAL DAYS RUN-COUNT
0 workday-task business-log 2026-07-16 08:00:00 1d mon,tue,wed,thu,fri 0
[admin@MikroTik] /system/scheduler>

在另一个示例中,将添加两个脚本,用于更改队列规则 "Cust0" 的带宽设置。每天上午 9 点将队列设置为 64Kb/s,下午 5 点将队列设置为 128Kb/s。队列规则、脚本和调度器任务如下:

[admin@MikroTik] /queue/simple> add name=Cust0 interface=ether1 \ 
\... dst-address=192.168.0.0/24 limit-at=64000
 [admin@MikroTik] /queue/simple> print
 Flags: X - disabled, I - invalid 0 name="Cust0" target-address=0.0.0.0/0 dst-address=192.168.0.0/24
 interface=ether1 limit-at=64000 queue=default priority=8 bounded=yes 
[admin@MikroTik] /queue/simple> /system/script 
[admin@MikroTik] /system/script> add name=start_limit source={/queue/simple/set \
 \... Cust0 limit-at=64000} 
[admin@MikroTik] /system/script> add name=stop_limit source={/queue/simple/set \ 
\... Cust0 limit-at=128000} 
[admin@MikroTik] /system/script> print 
 0 name="start_limit" source="/queue/simple/set Cust0 limit-at=64000" 
 owner=admin run-count=0 
 1 name="stop_limit" source="/queue/simple/set Cust0 limit-at=128000" 
 owner=admin run-count=0 
[admin@MikroTik] /system/script> .. scheduler 
[admin@MikroTik] /system/scheduler> add interval=24h name="set-64k" \ 
\... start-time=9:00:00 on-event=start_limit 
[admin@MikroTik] /system/scheduler> add interval=24h name="set-128k" \
 \... start-time=17:00:00 on-event=stop_limit 
[admin@MikroTik] /system/scheduler> print
 Flags: X - disabled 
# NAME ON-EVENT START-DATE START-TIME INTERVAL RUN-COUNT
 0 set-64k start... 2008-10-30 09:00:00 1d 0 
 1 set-128k stop_... 2008-10-30 17:00:00 1d 0 
[admin@MikroTik] /system/scheduler>

以下示例计划一个脚本,每周通过电子邮件发送路由器配置备份。

[admin@MikroTik] /system/script> add name=e-backup source={/system/backup 
{... save name=email; /tool/e-mail/send to="root@host.com" subject=([/system 
{... /identity/get name] . " Backup") file=email.backup} 
[admin@MikroTik] /system/script> print 
 0 name="e-backup" source="/system/backup/save name=ema... owner=admin run-count=0 

[admin@MikroTik] /system/script> ../scheduler 
[admin@MikroTik] /system/scheduler> add interval=7d name="email-backup" \
 \... on-event=e-backup 
[admin@MikroTik] /system/scheduler> print
 Flags: X - disabled
 # NAME ON-EVENT START-DATE START-TIME INTERVAL RUN-COUNT 
 0 email-... e-backup 2008-10-30 15:19:28 7d 1 
[admin@MikroTik] /system/scheduler>

不要忘记设置电子邮件设置,即 /tool/e-mail 下的 SMTP 服务器和 From: 地址。例如:

[admin@MikroTik] /tool/e-mail> set server=159.148.147.198 from=SysAdmin@host.com 
[admin@MikroTik] /tool/e-mail> print
 server: 159.148.147.198 
from: SysAdmin@host.com 
[admin@MikroTik] /tool/e-mail>

下面的示例将从午夜到中午每小时在日志中写入 'x':

[admin@MikroTik] /system/script> add name=enable-x source={/system/scheduler 
{... enable x} 
[admin@MikroTik] /system/script> add name=disable-x source={/system/scheduler 
{... disable x} 
[admin@MikroTik] /system/script> add name=log-x source={:log info message=x} 
[admin@MikroTik] /system/script> .. scheduler 
[admin@MikroTik] /system/scheduler> add name=x-up start-time=00:00:00 \ 
\... interval=24h on-event=enable-x 
[admin@MikroTik] /system/scheduler> add name=x-down start-time=12:00:00
 \... interval=24h on-event=disable-x 
[admin@MikroTik] /system/scheduler> add name=x start-time=00:00:00 interval=1h \ 
\... on-event=log-x 
[admin@MikroTik] /system/scheduler> print 
Flags: X - disabled
 # NAME ON-EVENT START-DATE START-TIME INTERVAL RUN-COUNT 
 0 x-up enable-x 2008-10-30 00:00:00 1d 0 
 1 x-down disab... 2008-10-30 12:00:00 1d 0 
 2 x log-x 2008-10-30 00:00:00 1h 0 
[admin@MikroTik] /system/scheduler>