【问题标题】:How to write a Cisco IOS script to run a set of commands at a certain time each day?如何编写 Cisco IOS 脚本以在每天的某个时间运行一组命令?
【发布时间】:2014-01-30 10:45:47
【问题描述】:

我正在尝试编写一个 tcl 脚本,该脚本将每天早上在我的路由器中删除和取消注册某些策略,但是当我尝试将其上传到设备时它不会工作。 这是我到目前为止所做的;

::cisco::eem::event_register_timer cron name crontimer2 cron_entry $_cron_entry

namespace import ::cisco::eem::*
namespace import ::cisco::lib::*

exec "en"
exec "cd RuBAN"
exec "delete syslogsyslog_fresh_install.tcl"
exec "delete syslogsyslog_fresh_install.cfg"
exec "delete marvin_fresh_installMarvinfieldst.tcl"
exec "conf t"
exec "no ev m p syslogsyslog_fresh_install.tcl"
exec "no ev m p marvin_fresh_installMarvinfieldst.tcl"

我的 tcl 脚本在我写的命令中有错误吗?任何人都可以对此有所了解,将不胜感激

【问题讨论】:

    标签: scripting tcl cisco-ios


    【解决方案1】:

    this manual 中的一个示例显示使用action_syslog 命令记录事件。您能否尝试用这样的电话替换您所有的execs,看看是否有一条消息被记录下来?也就是说,您的脚本甚至可以运行吗?此外,当脚本的运行时间过去时,当前是否在系统级别上记录了任何内容(例如有关脚本执行失败的通知或诸如此类的通知)?

    如果脚本运行,那么我建议将您的所有 execs 包含在 catch 命令中以捕获可能的错误并记录它们,如下所示:

    ::cisco::eem::event_register_timer cron name crontimer2 cron_entry $_cron_entry
    
    namespace import ::cisco::eem::*
    namespace import ::cisco::lib::*
    
    set code [catch {
        exec "en"
        exec "cd RuBAN"
        exec "delete syslogsyslog_fresh_install.tcl"
        exec "delete syslogsyslog_fresh_install.cfg"
        exec "delete marvin_fresh_installMarvinfieldst.tcl"
        exec "conf t"
        exec "no ev m p syslogsyslog_fresh_install.tcl"
        exec "no ev m p marvin_fresh_installMarvinfieldst.tcl"
    } res]
    if {$code != 0} {
        action_syslog priority error msg $res
    }
    # OK, the commands in the `catch`ed block went well...
    

    请注意,我完全没有使用 Cisco IOS 的经验,因此我正在考虑在“传统”平台(例如 POSIX 和 Windows)上运行的 Tcl。

    【讨论】:

    • 嗯,我怀疑exec cd非常不太可能为所欲为。
    • @DonalFellows,这也是我的直接反应,但后来我意识到我真的不知道他们对 Cisco IOS 中的 Tcl 做了什么,所以我的想法是尝试调试这个东西。 catch(除非以某种方式被覆盖)应该在 exec cd 失败时捕获错误。
    • @DonalFellows,到同一个地点...cd 带有相对路径名在我的书中也闻起来很糟糕,除非系统上的某些指南明确说明执行脚本的 cwd 是什么。
    • 哦,我也不知道它有什么作用,但我真的认为他更可能希望将多行脚本输入某种解释器。但我不知道外部 Tcl 脚本在哪里运行或这些东西。在发送内部 Tcl 脚本之前在 expect 中运行 ssh 并连接到路由器可能是正确的方法。好吧,也许……
    猜你喜欢
    • 2011-04-28
    • 1970-01-01
    • 2023-03-23
    • 2023-03-15
    • 2019-05-23
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    相关资源
    最近更新 更多