MikroTik Script: Router Rebooted Script
This is a useful little RouterOS script that will email you a nice report when your router reboots. The emailed report contains recent critical log events that may point you to the cause for the reboot. ie “router was rebooted without proper shutdown” or “out of memory condition was detected”.
The Router Reboot Script
:delay 1 :local reportBody "" :local deviceName [/system identity get name] :local deviceDate [/system clock get date] :local deviceTime [/system clock get time] :local hwModel [/system routerboard get model] :local rosVersion [/system package get system version] :local currentFirmware [/system routerboard get current-firmware] :local upgradeFirmware [/system routerboard get upgrade-firmware] :set reportBody ($reportBody . "Router Reboot Report for $deviceName\n") :set reportBody ($reportBody . "Report generated on $deviceDate at $deviceTime\n\n") :set reportBody ($reportBody . "Hardware Model: $hwModel\n") :set reportBody ($reportBody . "RouterOS Version: $rosVersion\n") :set reportBody ($reportBody . "Current Firmware: $currentFirmware\n") :set reportBody ($reportBody . "Upgrade Firmware: $upgradeFirmware") if ( $currentFirmware < $upgradeFirmware) do={ :set reportBody ($reportBody . "NOTE: You should upgrade the RouterBOARD firmware!\n") } :set reportBody ($reportBody . "\n\n=== Critical Log Events ===\n" ) :local x :local ts :local msg foreach i in=([/log find where topics~"critical"]) do={ :set $ts [/log get $i time] :set $msg [/log get $i message] :set $reportBody ($reportBody . $ts . " " . $msg . "\n" ) } :set reportBody ($reportBody . "\n=== end of report ===\n") /tool e-mail send subject="[$deviceName] Router Reboot Report" to="yourname@example.com" body=$reportBody
Install the script
Using Winbox, copy and paste the above script into System | Scripts on your MikroTik Router. The script should be named router-reboot-report. Here is a screenshot of the installed routeros script.
Setup script to run on Startup
After you have added the script, navigate to System | Scheduler and create a new schedule to run on startup. Here is a screenshot of what the schedule looks like.
We want the script to run every time the router reboots so from the Start Time dropdown choose “startup“
In the On Event section of the schedule paste the following commands.
:delay 30 /system script run router-reboot-report
The script name should exactly match the name of the script you added. The 30 second delay gives the router a chance to get connectivity after reboot. If the email fails to send then you may need to increase the delay.
Configure Logging
For this script to function properly you must configure persistent logging on your MikoTik Router. If your logs are not persistent across reboots you may miss some of the critical log events that tell the story of why it reboot in the first place. To configure persistent logging please see the Logging page on the mikrotik wiki.
Example Email Report
This is what the report looks like, you will receive this email each time your router reboots. As you can see in the example my router recently rebooted with an out of memory condition. The report also provides the current version RouterOS packager version as well as the firmware version information.
This script can help troubleshoot random reboots and unexpected crashes. I hope you find this MikroTik Script useful!
12 Replies to “MikroTik Script: Router Rebooted Script”
This only needs critical logging enabled to disk correct? Do you recommend them all be stored on flash? Thanks – this is great work.
Thanks for the scripts! Very helpful.
Greeting from Germany, very good script. Is it possible to send after reboot the mikrotik also to send via email the new cloud IP address if it changed? best regards db4rz I am a german radio amateur DB4RZ
Thanks very much for this,
Just set it up per your very clear instructions and all is working well.
I have not configured full logging yet, but even without that I can see when a reboot happens.
Best Regards,
Daniel in Oregon
Thanks for the feedback Daniel!
Thanks again JC,
This script is working flawlessly for me.
One follow-up question:
How would I modify the script to write to a local file instead of sending an email?
I assume it is easy, just don’t know the syntax.
Best regards,
DB
Hi again,
For what it’s worth:
I found that the latest Mikrotik RouterOS upgrade (7.1.1) seems to have
broken this very useful script. I’ve tested it on both my hEX and hAP^3 units.
After downgrading back to 6.49.2, everything is good again.
Regards,
DB
Change lin 9 from:
:local rosVersion [/system package get system version]
to:
:local rosVersion [/system package get routeros version]
Thank you Marc.
I’ve applied this change to both my hEX and hAP units running v7.9 Stable.
Scripts are working again. I really appreciate the help.
I just realized that you covered logging to disk in a previous tutorial.
“How to configure persistent logging”
That very likely answers my previous question and I will give it a go.
Thanks again,
DB
Still working fine on RouterOS Version: 7.5.
Though changed
:local rosVersion [/system package get system version]
for
:local rosVersion [/system package get routeros version]
Thanks for this info.
The scripts are working again after applying the change you mentioned.
(version 7.9 Stable on two distinct boxes)