一些routeros-script折腾随记
来自三线的随记
第三方cn docs: https://mikrotik-doc-cn.readthedocs.io/zh/latest/source/Scripts/content.html
常用操作:
变量定义: 可以通过 :local
或者 :global
定义,区别就是作用域不一样
:local pppoeInterface "pppoe-sfp-telecom" :local pppoeUptime
:put
可以将定义好的变量输出到console,但是不能输出到log
一般情况下,Scripts 在运行的时候,如果出现异常,不会有异常信息,只有简单的一句话:
script,error executing script script-test from xxxxxxx failed, please check it manually
可以通过类似以下方式把 exception (e) 打到log中方便排查
:onerror e { :local pppoeInterface "pppoe-sfp-telecom" :local pppoeUptime [/interface/pppoe-client/monitor $pppoeInterface once do={:set pppoeUptime $uptime} ] :log info "PPPoE interface uptime: $pppoeUptime" } do {:log info "script running error: $e"}
some example:
用于判断 pppoe 连接时间,如果不在 3-5 点,就运行指定的脚本
:onerror e { :local pppoeInterface "pppoe-sfp-telecom" :local pppoeUptime :local pppoeUptimeHour :local dayPos :local hourSemicolonPos :local timeCutPosStart 0 [/interface/pppoe-client/monitor $pppoeInterface once do={:set pppoeUptime $uptime} ] :log info "PPPoE interface uptime: $pppoeUptime" :set dayPos [:find $pppoeUptime "d"] :if ($dayPos >0) do={ :set timeCutPosStart ($dayPos + 1) #:log debug "day pos found." } :log info "timeCutPosStart: $timeCutPosStart" :set hourSemicolonPos [:find $pppoeUptime ":"] :set pppoeUptimeHour [:pick $pppoeUptime $timeCutPosStart $hourSemicolonPos] :log info "pppoeUptimeHour: $pppoeUptimeHour" :if ( $pppoeUptimeHour > 5 or $pppoeUptimeHour < 3 ) do={ :log info "PPPOE connection uptime not as expected! will be restarted..." /interface/pppoe-client/disable $pppoeInterface :log info "$pppoeInterface disabled" delay 3 /interface/pppoe-client/enable $pppoeInterface :log info "$pppoeInterface enabled" } } do {:log info "script running error: $e"}