讓RouterOS自動把Log檔email出去

讓RouterOS自動把Log檔Mail出去,這個動作可以拆成2個步驟來執行
1.在System->Script建立相關的Script(產生Log檔案,發送mail)
2.在System->Scheduler建立排程(判斷Log的行數到達我們的設定值就Mail出去)
第1個部份,先建立2個Script
建立一個名為MailLog的Script


請修改SMTP伺服器位置(記得ROS的DNS要有,才可以解析)、寄件人、收件人的資訊

#Script在RouterOS 3.20中測試通過
#Date:2009/03/14
#Script Name:MailLog

#SMTP伺服器位置
:local SMTP "xxx.smtp.com"

#寄件人
:local MailFrom "ROSLog<ROS@xxxxxxxxx.com>"

#收件人
:local MailTo "REC@xxxxxxxxx.com"

#Log檔的名稱(位於/file)
:local LogFileName

#寄出後是否刪除已存檔的Log(/file裡的檔案)
#0=保留  1=刪除
:local DeleteLogFile 1

:set LogFileName ([/system identity get name] . "Log-" . [:pick [/system clock get date] 7 11] . [:pick [/system clock get date] 0 3] . [:pick [/system clock get date] 4 6] . ".txt");

/tool e-mail set from=$MailFrom;

/log print file=[$LogFileName];

/tool e-mail send to=$MailTo server=[:resolve $SMTP] subject=([/system identity get name] . " Log " . [/system clock get date]) file=[$LogFileName];

:delay 10;

:if ($DeleteLogFile =1) do={
/file rem [/file find name=($LogFileName)];
}

:log info ("System Log emailed at " . [/sys cl get time] . " " . [/sys cl get date]);


接下來建立名為AutoMailLog的Script
超過幾條就把Log寄出去請依照你的實際需要設置
寄出後會自動清空Log,如果你想保留Log
那就把:local IsClearLog 1 改為:local IsClearLog 0
不過這樣子會造成每次都會寄發Mail,請特別注意

#Script在RouterOS 3.20中測試通過
#Date:2009/03/14
#Script Name:AutoMailLog

#超過幾條就把Log寄出去
:local MaxLine 300

#寄出後是否要清空現有的Log資訊
#0=保留  1=清空
:local IsClearLog 1

:if ([/log print count-only] >= $MaxLine) do={
/system script run MailLog;
:if ($IsClearLog = 1) do={/system script run ClearMemoryLog;}
}


第2個部份是建立Scheduler排程
在System->Scheduler 新增一個名為MailLog的排程
內容只有一行,時間是我是設定為5分鍾跑一次


/system script run AutoMailLog 



最後總結一下,整個流程如下圖

參考資料:http://forum.mikrotik.com/viewtopic.php?f=9&t=29122

評論 (16) -

  • GMail 的SMTP是需要帶帳號密碼驗証的,而RouterOS 3.20(含)以下目前並沒有支援

    不過3.25版以上似乎就有支援此種帶帳號密碼驗証的方式。因手邊沒有最新的版本,沒辦法試。

    /tool e-mail send to="myhotmail@hotmail.com" from="myhotmail@hotmail.com" user="myhotmail@hotmail.com" password="myhotmailpass" server=65.55.172.254 s
    ubject="testing" body="testing testing" file=testfile

    可以參考這個網址
    forum.mikrotik.com/viewtopic.php?f=9&t=32814
  • 那請問版大    你是用哪一個MAIL
    來做設定的ㄋ?

    順道問依下  版大 方便留 MSN 給小弟

    讓我有問題 直接方便 請教
  • 抱歉最近比較忙沒時間回覆
    我是使用Hinet的線路,所以是使用Hinet提供的SMTP
    如果你也是Hinet的線路的話
    可以把 Script 裡的 SMTP 換成下面這樣

    #SMTP伺服器位置
    :local SMTP "msa.hinet.net"

    有問題的話大家再研究一下
  • 我設定了 gmail 的 smtp server
    用 tls,帳號、密碼、port 都設定了,還是無法發送出去
  • to Gemma:
    1.先把firewall擋的規則全部關閉。
    2.於ROS上使用ping的工具測試ROS本機連gmail的smtp server可否可通。
    3.看看gmail上的帳號,是否有開啟允許使用smtp service。
    4.察看log檔,觀察失敗的原因。
  • 請問小弟家中是hinet adsl pppoe取的ip的,如果不想以ddns更新rb450g的ip資訊的話,可以用script的方式,將rb450g目前取得到的hinet ip,mail到自己gmail中嗎?
    目前有參而mobile01(www.mobile01.com/topicdetail.php)在script中設定log寄到gmail。
    請問如果在這個script中增加自己現有的hinet pppoe ip呢
    謝謝
  • 先感謝您分享的文章:
    另外以下是小弟修改您的指令及語法所完成的,再6.30.1寄出後清空Log資訊
    必須更改為:
    /system logging action set memory memory-lines=1;
    /system logging action set memory memory-lines=1000;
    小弟此回饋給大家謝謝
    --------------------------------------------------------------------------------------------------------------
    #Script在RouterOS 6.30.1中測試通過
    #Date:2015/07/30
    #Script Name:AutoMailLog

    #超過幾條就把Log寄出去
    :local MaxLine 900

    #寄出後是否要清空現有的Log資訊
    #0=保留  1=清空
    :local IsClearLog 1

    :if ([/log print count-only] >= $MaxLine) do={
    /system script run MailLog;
    :if ($IsClearLog = 1) do={/system logging action set memory memory-lines=1;
    /system logging action set memory memory-lines=1000;}
    }

新增評論

Loading