找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: zh1000000

[脚本] PCC断线自动修改脚本遇到问题,寻找解决的方法。

[复制链接]
 楼主| 发表于 2016-8-5 04:00:30 | 显示全部楼层
cspm333 发表于 2016-8-5 03:58
傻瓜script ,總沒道理錯誤吧

:if ([/ping www.baidu.com count=3 interface=pppoe-out1]>0) \

这样就能改,好奇怪。什么原因呢?

好像最后这个修改的句柄没有恢复的语句吧,是吗

点评

最後負責pppoe重撥的是/interface enable "pppoe$i"有錯別字,是"pppoe-out$i"才對...我已經把相關樓都修正了.  发表于 2016-8-5 13:26
恢復是do={:if (/ip firewall mangle get ....這一句  发表于 2016-8-5 13:23
routeros
回复

使用道具 举报

发表于 2016-8-5 11:39:23 | 显示全部楼层
如过在用的PCC 脚本可以正常工作的话 个人认为不需要改动

仅对线路通断进行判断并使其重播至可用即可

当然也可以在附件脚本中增加 操作同时 调度pcc 程式

检测拨号脚本 (1).zip

777 Bytes, 下载次数: 4

售价: 1 铜板  [记录]

routeros
回复

使用道具 举报

 楼主| 发表于 2016-8-5 11:52:40 | 显示全部楼层
好的,感谢阿湘的热心解答,昨晚跟这位兄台磨了一晚,还是没解决问题。起床吃个午饭,继续摸。
routeros
回复

使用道具 举报

发表于 2016-8-5 13:04:06 | 显示全部楼层
本帖最后由 cspm333 于 2016-8-5 13:18 编辑
zh1000000 發表於 2016-8-5 11:52
好的,感謝阿湘的熱心解答,昨晚跟這位兄台磨了一晚,還是沒解決問題。起床吃個午飯,繼續摸。

小弟猜會不會是"字串"的問題,把("L".($i+3)) 換"L$($i+3)"試試.

:for i from=1 to=3 \
    do={
            :local array [/ip firewall mangle find comment="pcc$i"]
            :if ([/ping www.baidu.com count=3 interface="pppoe-out$i"]>0) \
                do={:if ([/ip firewall mangle get $array new-routing-mark]!="L$i") \
                            do={/ip firewall mangle set $array new-routing-mark="L$i"}} \
                else={:if ([/ip firewall mangle get $array new-routing-mark]!="L$($i+3)") \
                             do={/ip firewall mangle set $array new-routing-mark="L$($i+3)"}
                          /interface enable "pppoe-out$i"}
           }


routeros
回复

使用道具 举报

 楼主| 发表于 2016-8-7 18:26:07 | 显示全部楼层
cspm333 发表于 2016-8-5 13:04
小弟猜會不會是"字串"的問題,把("L".($i+3)) 換"L$($i+3)"試試.

:for i from=1 to=3 \

:if ([/ping www.baidu.com count=3 interface="pppoe-out$i"]>0)这句我还不是很理解,大于0这个参数是从哪里体现出来的。
像我下面这个手动测试百度的包里,有个断流的timeout,这个会不会引起脚本的误判?如果是这样,那路由器不是很累。还有一个切换回来怎么实现呢?比如现在已经成功切换到备用线路了。脚本还在运行中的。那默认的ping肯定是通的,是不是要再建一个脚本侦测pppoe-out1来实现?

HOST                                     SIZE TTL TIME  STATUS                 
14.215.177.37                              56  56 18ms
14.215.177.37                              56  56 17ms
14.215.177.37                                           timeout               
    sent=3 received=2 packet-loss=33% min-rtt=17ms avg-rtt=17ms max-rtt=18ms

点评

do和else裡面都有一個if判斷,假設new-routing-mark不是等於(!=)指定的to_pppoeX ,就把它(do)改成(set)指定的to_pppoeX  发表于 2016-8-7 19:36
所以received不是>0 ,則執行else裡面script (else裡面的script是檢查new-routing-mark是否用adsl)  发表于 2016-8-7 19:26
所以received >0 ,執行do裡面script (do裡面的script是檢查new-routing-mark是否用光纖)  发表于 2016-8-7 19:24
所以這即判段received , >0即代表光纖至少有1次回應代表有在工作,若連1都沒有就讓new-routing-mark換成adsl  发表于 2016-8-7 19:22
有回應1次received就會顯示1,像您的貼的內文received不就是2嗎?  发表于 2016-8-7 19:15
routeros
回复

使用道具 举报

 楼主| 发表于 2016-8-8 13:52:16 | 显示全部楼层
cspm333 发表于 2016-8-5 13:04
小弟猜會不會是"字串"的問題,把("L".($i+3)) 換"L$($i+3)"試試.

:for i from=1 to=3 \

又一个通宵试了很多次,确定脚本不能用,放弃了。有空再研究吧。不知道为什么,我总觉得这句有问题。
:if ([/ping www.baidu.com count=3 interface="pppoe-out$i"]>0) \
routeros
回复

使用道具 举报

发表于 2016-8-8 14:03:04 | 显示全部楼层
zh1000000 发表于 2016-8-8 13:52
又一个通宵试了很多次,确定脚本不能用,放弃了。有空再研究吧。不知道为什么,我总觉得这句有问题。
:i ...

不會有問題,因為經得起驗證
Snap10.png

routeros
回复

使用道具 举报

 楼主| 发表于 2016-8-8 14:28:15 | 显示全部楼层
cspm333 发表于 2016-8-8 14:03
不會有問題,因為經得起驗證

因为在log里看不到,如果是出错应该有提示的。但是死活改不了mark值。如果我要一句一句的测试,是不是都要用到像你截图的这个put命令?
routeros
回复

使用道具 举报

 楼主| 发表于 2016-8-8 14:36:10 | 显示全部楼层
cspm333 发表于 2016-8-8 14:03
不會有問題,因為經得起驗證

我又按你截图的方法试了一下,确实是错误。

expected end of command (line 1 column 57)提示这个。

你的是6.X的,语法或者命令是不是不通用。唯一能想到这个了

点评

put ([/ping www.baidu.com count=3 interface=pppoe-out1]>0)  发表于 2016-8-8 15:27
您少打了右括弧了...  发表于 2016-8-8 15:26
routeros
回复

使用道具 举报

 楼主| 发表于 2016-8-8 14:44:36 | 显示全部楼层
确实,不加>0就测试通过,加了就会出现expected end of command (line 1 column 57)。

看来我怀疑的还是对的,应该是版本的语法问题。
routeros
回复

使用道具 举报

 楼主| 发表于 2016-8-8 16:06:41 | 显示全部楼层
cspm333 发表于 2016-8-8 14:03
不會有問題,因為經得起驗證

好吧,复制带括弧这段再试是正常的结果了,跟你的截图是一样的。

还是不能切换,到底会是神马原因,头大
routeros
回复

使用道具 举报

 楼主| 发表于 2016-8-9 07:38:54 | 显示全部楼层
cspm333 发表于 2016-8-8 14:03
不會有問題,因為經得起驗證

朋友,还是这句ping命令,反复验证后发现,只要是断线状态下,这句是不起作用的。

点评

您是對的,我再幫您修改script  发表于 2016-8-9 08:33
routeros
回复

使用道具 举报

发表于 2016-8-9 08:56:30 | 显示全部楼层
zh1000000 发表于 2016-8-9 07:38
朋友,还是这句ping命令,反复验证后发现,只要是断线状态下,这句是不起作用的。

pppoe的檢測似乎是必要過程...省缺不了

修改後的script:
:for i from=1 to=3 \
    do={
           :local array [/ip firewall mangle find comment="pcc$i"]
           :if ([/interface get "pppoe-out$i" running]) \
               do={:if ([/ping www.baidu.com count=3 interface="pppoe-out$i"]>0) \
                          do={:if ([/ip firewall mangle get $array new-routing-mark]!="L$i") \
                                     do={/ip firewall mangle set $array new-routing-mark="L$i"}} \
                          else={:if ([/ip firewall mangle get $array new-routing-mark]!="L$($i+3)") \
                                       do={/ip firewall mangle set $array new-routing-mark="L$($i+3)"}
                                   /interface enable "pppoe-out$i"}} \

               else={:if ([/ip firewall mangle get $array new-routing-mark]!="L$($i+3)") \
                            do={/ip firewall mangle set $array new-routing-mark="L$($i+3)"}
                        /interface enable "pppoe-out$i"}
          }


routeros
回复

使用道具 举报

 楼主| 发表于 2016-8-9 09:16:24 | 显示全部楼层
cspm333 发表于 2016-8-9 08:56
pppoe的檢測似乎是必要過程...省缺不了

修改後的script:

这次成功了,达到秒改的效果。找到原因真好。意思是必须判定检测的线路为running状态,然后ping命令为辅助检测,只要两者不满足就切。是这样理解吗?
还有我想去掉重新拨号这句应该怎么删除还是直接在那句前面加#?我觉得没必要,因为断线以后会一直保持拨号状态的,然后脚本运行时间我选择了30秒,应该不算太频繁吧。

点评

所以pppoe有在running時才會跑ping的部份 ,要是pppoe連running都沒有就直接切到adsl去  发表于 2016-8-9 09:20
我測的結果是若pppoe是斷開的,使用ping會卡住不動...  发表于 2016-8-9 09:19
routeros
回复

使用道具 举报

 楼主| 发表于 2016-8-9 09:41:08 | 显示全部楼层
cspm333 发表于 2016-8-9 08:56
pppoe的檢測似乎是必要過程...省缺不了

修改後的script:

:for i from=1 to=3 \
    do={
           :local array [/ip firewall mangle find comment="pcc$i"]
           :if ([/interface get "pppoe-out$i" running]) \
               do={:if ([/ping www.baidu.com count=3 interface="pppoe-out$i"]>0) \
                          do={:if ([/ip firewall mangle get $array new-routing-mark]!="L$i") \
                                     do={/ip firewall mangle set $array new-routing-mark="L$i"}} \
                          else={:if ([/ip firewall mangle get $array new-routing-mark]!="L$($i+3)") \
                                       do={/ip firewall mangle set $array new-routing-mark="L$($i+3)"}
                                  # /interface enable "pppoe-out$i"}} \

               else={:if ([/ip firewall mangle get $array new-routing-mark]!="L$($i+3)") \
                            do={/ip firewall mangle set $array new-routing-mark="L$($i+3)"}
                       # /interface enable "pppoe-out$i"}
          }

请问是不是这样,那句重拨就不工作了?还有个问题就是,如果现在是检测running状态,但是掉线的时候pppoe的状态还是running的啊,只是还没挂断而已,那这个时候ping是不是也会卡死?

点评

您兩個註解的#加在不該加的地方,script錯誤了...不信您可以在視窗跑看看.  发表于 2016-8-9 10:21
所以才在running時,還會加做ping的檢測  发表于 2016-8-9 10:16
routeros
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|软路由 ( 渝ICP备15001194号-1|渝公网安备 50011602500124号 )

GMT+8, 2024-5-7 16:20 , Processed in 0.081812 second(s), 6 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表