MANUAL: Mikrotik, colección de scripting

Tengo esta duda sobre el uso de variables en los scripts.

¿Se puede invocar el valor de un campo por medio de una variable directa del sistema sin necesidad de crear una manualmente?

Script SendEmailFunction por @diamuxin

# Módulo para utilizar una cuenta Gmail para enviar emails.​

# Variables
:local SendFrom "correo-remitente@gmail.com";
:local PasswordMail "MyStrongPassword";
:local SmtpServer 173.194.76.108;
:local UserName "Router MikroTik";
:local SmtpPort 587;
:local UseTLS "yes";

Ejemplo: En Tools -> Email Setting, si hemos configurado los valores de Server, Port Start TLS, etc... llamarlos directamente en los scripts sin tener que crear variables manuales para tal fin.

Ver el adjunto 84825

Saludos!
¿Por qué no abres esto en un hilo aparte, y nos explicas un poco mejor qué prentedes hacer? Porque, si lo que quieres es enviar un mail, con hacer uso de la herramienta de envio de correos, ya configurada, no necesitas más.

Saludos!
 
Tengo esta duda sobre el uso de variables en los scripts.

¿Se puede invocar el valor de un campo por medio de una variable directa del sistema sin necesidad de crear una manualmente?

Script SendEmailFunction por @diamuxin

# Módulo para utilizar una cuenta Gmail para enviar emails.​

# Variables
:local SendFrom "correo-remitente@gmail.com";
:local PasswordMail "MyStrongPassword";
:local SmtpServer 173.194.76.108;
:local UserName "Router MikroTik";
:local SmtpPort 587;
:local UseTLS "yes";

Ejemplo: En Tools -> Email Setting, si hemos configurado los valores de Server, Port Start TLS, etc... llamarlos directamente en los scripts sin tener que crear variables manuales para tal fin.

Ver el adjunto 84825

Saludos!
Hola!

Realmente son dos formas de llegar al mismo sitio. El módulo "SendEmailFunction" y el módulo "
MyTGBotSendMessage" los tengo creados y con el "copy/paste" me resulta más cómodo hacer llamadas desde otros scripts.

Como dice @pokoyo puedes usar directamente la utilidad que lleva Mikrotik para enviar correos. Por ejemplo:

Bash:
/tool e-mail send to="tucuenta@gmail.com" from="Router Mikrotik" \
subject="\F0\9F\92\BE [Config Backup] $sysname $time" \
body="Se ha realizado backup del sistema el $date a las $time";

Antes tiene que estar configurada correctamente la herramienta:

1628111655325.png


S@lu2.
 
Última edición:
Muchas gracias a todos por los scripts.
La verdad es que tiene su punto ver en Telegram la información del sistema o sucesos que se producen en el router.
Saludos.

IMG_20210805_103225.jpg
 
Crear el backup en cloud, con un script en /system scripts
Código:
/log info message="Cloud backup started"
/system backup cloud upload-file action=create-and-upload password=MySup3rb4ckUp! replace=[find name]
/tool e-mail send to=pokoyo@pericoplaotes.com subject="New cloud backup created for $[/system identity get name] router" body="A new cloud backup has been created at $[/system clock get time] on $[/system clock get date]."
/log info message="Cloud backup finished"

Hacerlo de manera periódica, todas las semanas a las 5 de la mañana
Código:
/system scheduler
add interval=1w name=backups on-event=cloud-backup policy=\
ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon start-date=jan/01/2021 start-time=05:00:00
Hola pokoyo, la he liado un poco y después de varios intentos fallidos, hice un copia pega y ejecute el script con los datos que tenías tú, en el log solo me aparece la ejecución de started pero no el de financiación ¿Habrá pasado algo? Me refiero si envié mi configuración algún sitio, supongo que no. Ya me dirás. Gracias

Ante todo mis disculpas por meter la pata.

Saludos
 
Este script, gracias a las aportaciones de @Mikroberto y @Otro+ , lo he adaptado a mi módulo de Telegram.

Este script nos envía un mensaje vía Telegram informando de la conexión de un host a nuestro DHCP, obteniendo la información del nombre del host y dirección MAC, también lee los comentarios para identificar al dispositivo si previamente le hemos etiquetado aplicando el "make static" (IP estática a una MAC determinada).

Va ubicado en la caja "Script" del DHCP Server.

rhM7MWx54b.png


Bash:
/ip dhcp-server lease
:if ($leaseBound = 1) do={
    :do {
        # Variables
        :local Comment [/ip dhcp-server lease get value-name=comment number=[/ip dhcp-server lease find address=$leaseActIP]]
        :local DeviceName [/system identity get name];
        # START Send Telegram Module
        :local MessageText "\E2\84\B9 <b>$DeviceName: Info DHCP</b> %0D%0A Nombre: $"lease-hostname" %0D%0A IP: $leaseActIP %0D%0A MAC: $leaseActMAC %0D%0A Comentario: $Comment";
        :local SendTelegramMessage [:parse [/system script  get MyTGBotSendMessage source]];
        $SendTelegramMessage MessageText=$MessageText;
        #END Send Telegram Module
        :log info "Alerta DHCP: $"lease-hostname" $leaseActMAC se ha conectado"
    } on-error={:log error "Alerta DHCP: Fallo de notificación a Telegram"}
}

El resultado, cada vez que se conecte alguien, es un aviso como este:

bWzZDYdTZT.png


Editado 05/10/2021:

Versión 2.0 del script, el cual asigna direcciones IP estáticas automáticamente a cualquier dispositivo que se conecte a nuestra LAN vía DHCP y le coloca una etiqueta con la fecha y hora. Además nos informa vía Telegram.

Bash:
# Created Jotne 2021 v1.0
# Modified by diamuxin

/ip dhcp-server lease
# Test if this is a Bound session and the lease is a dynamic one.
# Do not change older reservation.
:if (($leaseBound=1) && ([find where dynamic mac-address=$leaseActMAC]!="")) do={

    # Get the lease number
    :local Lease [find mac-address=$leaseActMAC]

    # Get date, time and Device name
    :local date [/system clock get date]
    :local time [/system clock get time]
    :local DeviceName [/system identity get name]

    # Make the lease static
    make-static $Lease

    # Get host name
    :local Name [get $Lease host-name ]

    # Add date and time as a comment to show when it was seen first time
    comment comment="$date $time $Name" $Lease

    :delay 2s
    # START Send Telegram Module
    :local MessageText "\E2\84\B9 $DeviceName: Info DHCP %0D%0A Nombre: $Name %0D%0A IP: $leaseActIP %0D%0A MAC: $leaseActMAC %0D%0A Comentario: $comment";
    :local SendTelegramMessage [:parse [/system script  get MyTGBotSendMessage source]];
    $SendTelegramMessage MessageText=$MessageText;
    #END Send Telegram Module

    # Send a message to the log
    :log info message="DHCP Info: IP=$leaseActIP MAC=$leaseActMAC name=$Name"
}

El siguiente script elimina todas las entradas DHCP estáticas que no se hayan conectado en las últimas 100 semanas. Al mismo tiempo, también elimina la entrada DNS correspondiente a la concesión DHCP que se elimina.

Bash:
# Created Jotne 2021 v1.0
# Remove all static DHCP and corresponding DNS leases more than 100 week old
:local counter 0
/ip dhcp-server lease
:foreach id in=[find where dynamic=no last-seen~"^1[0-9][0-9]"] do={
    :local ip [get $id address]
    :set counter ($counter+1)
    # delete DNS entry with that IP
    /ip dns static remove [find where address=$ip]
    # remove DHCP entry
    remove $id
}
:log info message="Number of static DHCP older>100weeks removed: $counter"

TIP:

Si quieres que sólo te avise de las Leases de nuevos dispositivos ajenos a los que actualmente tienes registrados:

Bash:
# Primero, asegúrate que tus propios dispositivos tengan IP estática, si no...
/ip dhcp-server lease make-static [find where dynamic]

# Ahora reemplaza esta línea de tu script actual:
:if ($leaseBound = 1) do={

# Por esta:
:if ($leaseBound = 1 && [ get [ find where mac-address=$leaseActMAC ] dynamic ] = true) do={

Eso es todo.
S@lu2.
 
Última edición:
Hola @Universo2021

Lo primero que tienes que tener configurado para usar ese script es el envío de mail con tu cuenta de correo, algo así, si usas gmail. La password es una contraseña de aplicación que tendrás que crear en la cuenta de google, no se te ocurra poner ahí la contraseña de tu correo electrónico, que sino la pintarás en cualquier export.

1628166220168.png


hecho esto, el script que tienes a continuación se describe sólo, y lo único que hace es hacer uso de la heramienta de envío de correo, ya configurado, con la instrucción /tool email send, indicando los parámetros de envío del correo como la dirección a la que se lo envías, el asunto y el cuerpo del mensaje.

es decir, si no tenías configurada la herramienta de envío de mails, tranquilo que mandar no has mandado nada a ningún sitio. De hecho, esa dirección de mi ejemplo, es ficticia.

Saludos!
 
Este script, gracias a las aportaciones de @Mikroberto y @Otro+ , lo he adaptado a mi módulo de Telegram.

Este script nos envía un mensaje vía Telegram informando de la conexión de un host a nuestro DHCP, obteniendo la información del nombre del host y dirección MAC, también lee los comentarios para identificar al dispositivo si previamente le hemos etiquetado aplicando el "make static" (IP estática a una MAC determinada).

Va ubicado en la caja "Script" del DHCP Server.

Ver el adjunto 84849

Bash:
/ip dhcp-server lease
:if (($leaseBound=1) && ([/ip dhcp-server lease find where dynamic mac-address=$leaseActMAC]!="")) do={
    :do {
        # Variables
        :local Comment [/ip dhcp-server lease get value-name=comment number=[/ip dhcp-server lease find address=$leaseActIP]]
        :local DeviceName [/system identity get name];
        # START Send Telegram Module
        :local MessageText "\E2\84\B9 <b>$DeviceName:</b> Info DHCP</b> %0D%0A Nombre: $"lease-hostname" %0D%0A IP: $leaseActIP %0D%0A MAC: $leaseActMAC %0D%0A Comentario: $Comment";
        :local SendTelegramMessage [:parse [/system script  get MyTGBotSendMessage source]];
        $SendTelegramMessage MessageText=$MessageText;
        #END Send Telegram Module
        :log info "Alerta DHCP: $"lease-hostname" $leaseActMAC se ha conectado"
    } on-error={:log error "Alerta DHCP: Fallo de notificación a Telegram"}
}

El resultado, cada vez que se conecte alguien, es un aviso como este:

Ver el adjunto 84846
Con qué título añadimos este? Venga, dime alguno, que estoy poco creativo ya.

Saludos!
 
Con qué título añadimos este? Venga, dime alguno, que estoy poco creativo ya.

Saludos!
Disculpa que me has pillado con la paella en la mano ;)

Podría ser algo así: "Notificaciones Telegram de conexiones establecidas a tu Servidor DHCP"
¿Cómo lo ves?

S@lu2.
 
Script para enviarnos el log de nuestro router cada x tiempo (definirlo en scheduler el periodo que necesitemos)

Bash:
# vuelca el log al archivo log-mikrotik.txt  
/log print file=log-mikrotik.txt

# genera un evento de nombre "enviando log por email" visible en el log
:log info message="enviando log por email"

# capturan la fecha y hora del sistema
:global data [/system clock get date]
:global hora [/system clock get time]

# captura el nombre de nuestro router
:local DeviceName [/system identity get name];

# Define el texto en el "body" del email
:local Text "log-mikrotik $data $hora";

# Módulo para envíos de emails
# START Send Email Module
   :local SendTo "tucorreo@gmail.com";
   :local Subject "\E2\84\B9 $DeviceName: log-mikrotik $data $hora";
   :local MessageText $Text;
   :local FileName "log-mikrotik.txt";
   :local SendEmail [:parse [/system script get SendEmailFunction source]];
   $SendEmail SendTo=$SendTo TextMail=$MessageText Subject=$Subject FileName=$FileName;
# END Send Email Module

En mensajes anteriores ya se ha indicado el contenido del módulo "SendEmailFunction" para el envío de correos.
Hola diamuxin, en primer lugar gracias por estos script que son de gran ayuda, por otro lado estuve poniendo varios script de los que pusiste y los que llevo puestos me funcionan muy bien, pero este en concreto me genera bien el archivo pero no lo llega a enviar por email y no se por que por que otros script que tengo la función de mail va perfectamente, otro problema que encontré es que el archivo generado los sucesos del día de hoy no les pone fecha, cuando en el log de mikrotik si que tienen fecha, por algún motivo modifica el contenido del log. Me gustaría poder saber porque me da esos fallos.

Por otro lado estuve mirando para darle una vuelta de tuerca a este script y programarlo para que envía por mail una vez al día, el caso sería mandar el log del día, borrar el historial de log que tenga en ese momento (X lineas, las que sean) y una vez enviado el mail borrar el archivo generado en Files. No se si eso podría hacerse. Gracias.

Añado que en el script de enviar el backup de mikrotik por email y pro Telegram tampoco me funciona correctamente, se generan los archivos correctamente pero nada mas, NO se llegan a enviar por Telegram ni por mail y tampoco los llega a borrar.

Saludos
 
Última edición:
Hola,

Lo acabo de comprobar y a mi si me funciona bien el envío de emails. Puedes utilizar la herramienta propia de Mikrotik (Tools -> Email) o en mi caso utilizo un módulo (script) llamado "SendEmailFunction" por versatilidad. Si usas mis scripts, revisa que lo tengas creado previamente y bien configurado antes de utilizar el script de Logs.

Bash:
# Módulo para utilizar una cuenta Gmail para enviar emails.
# Variables
:local SendFrom "correo-remitente@gmail.com";
:local PasswordMail "MyStrongPassword";
:local SmtpServer 173.194.76.108;
:local UserName "Router MikroTik";
:local SmtpPort 587;
:local UseTLS "yes";

# Main script code
/tool e-mail send to=$SendTo server=$SmtpServer port=$SmtpPort start-tls=$UseTLS \
user=$SendFrom password=$PasswordMail from=$SendFrom subject=$Subject \
body=$TextMail file=$FileName;

Respecto a las fechas del Log, los primeros 260 registros aproximadamente SI aparecen con sus fechas correctamente y los siguientes registros aparecen desde la hora en adelante (queda omitido el día). No hay explicación (lo puedes probar en la terminal al escribir "/log print"), es posible que sea un "bug" de la última versión de RouterOS.

Para programarlo ejecuta directamente el script con la utilidad "Scheduler" a las horas deseadas. Creamos uno para que ejecute el script "send-log" en el caso que se llame así.

Jz5gZFlD3Q.png


Para borrar el fichero creado, utiliza simplemente esta instrucción dentro del script:

Bash:
/file remove log-mikrotik.txt

Para el borrar el log y manejar las líneas, te aconsejo que leas este post de @pokoyo creado en este mismo hilo de scripting:
https://www.adslzone.net/foro/mikrotik.199/manual-mikrotik-coleccion-scripting.575217/#post-3581136

Respecto al script de backups, lo he modificado y ya debería funcionarte (a mi me funciona).

S@lu2.
 
Última edición:
Hola,

Lo acabo de comprobar y a mi si me funciona bien el envío de emails. Puedes utilizar la herramienta propia de Mikrotik (Tools -> Email) o en mi caso utilizo un módulo (script) llamado "SendEmailFunction" por versatilidad. Si usas mis scripts, revisa que lo tengas creado previamente y bien configurado antes de utilizar el script de Logs.

Bash:
# Módulo para utilizar una cuenta Gmail para enviar emails.
# Variables
:local SendFrom "correo-remitente@gmail.com";
:local PasswordMail "MyStrongPassword";
:local SmtpServer 173.194.76.108;
:local UserName "Router MikroTik";
:local SmtpPort 587;
:local UseTLS "yes";

# Main script code
/tool e-mail send to=$SendTo server=$SmtpServer port=$SmtpPort start-tls=$UseTLS \
user=$SendFrom password=$PasswordMail from=$SendFrom subject=$Subject \
body=$TextMail file=$FileName;

Respecto a las fechas del Log, los primeros 260 registros aproximadamente SI aparecen con sus fechas correctamente y los siguientes registros aparecen desde la hora en adelante (queda omitido el día). No hay explicación (lo puedes probar en la terminal al escribir "/log print"), es posible que sea un "bug" de la última versión de RouterOS.

Para programarlo ejecuta directamente el script con la utilidad "Scheduler" a las horas deseadas. Creamos uno para que ejecute el script "send-log" en el caso que se llame así.

Ver el adjunto 84915

Para borrar el fichero creado, utiliza simplemente esta instrucción dentro del script:

Bash:
/file remove log-mikrotik.txt

Para el borrar el log y manejar las líneas, te aconsejo que leas este post de @pokoyo creado en este mismo hilo de scripting:
https://www.adslzone.net/foro/mikrotik.199/manual-mikrotik-coleccion-scripting.575217/#post-3581136

Respecto al script de backups, lo he modificado y ya debería funcionarte (a mi me funciona).

S@lu2.
Hola, la función de mail me funciona bien y sin problema con otros scripts, por lo que deduzco que ese no es el problema, por lo que veo el problema va cuando el envío por mail es de un archivo, no se que probar. Gracias

Saludos
 
Hola, la función de mail me funciona bien y sin problema con otros scripts, por lo que deduzco que ese no es el problema, por lo que veo el problema va cuando el envío por mail es de un archivo, no se que probar. Gracias

Saludos
Comentarte que no soy experto en scripting, utilizo la información que otros usuarios comparten y la adapto a mis necesidades, así es como se aprende: ensayo, error y wiki de Mikrotik, jeje.

Tendrás que ir probando para averiguar dónde tienes el problema, ya te digo que antes de responderte lo he probado todo y el script de backups .rsc y .backup lo he modificado y me funciona bien.

Prueba esto desde la misma consola:

Bash:
/tool e-mail send to="destinatario@gmail.com" from="Router Mikrotik" \
subject="\F0\9F\92\BE [Config Backup]" file="nombredearchivo.txt"

donde nombredearchivo.txt es un fichero que has creado manualmente a modo de pruebas en el apartado "Files" de Winbox, deberías recibir un correo a tu cuenta gmail con ese fichero. En caso contrario es la misma consola la que te dirá que tipo de error detecta.

S@lu2.
 
Muchas veces el error está en que la operación previa no ha terminado cuando se lanza el siguiente comando. Dependiendo del tipo de comando, esto puede ser un problema. La solución más sencilla la tenéis en la wiki: meter un delay después de la operación en cuestión.

A mi me ha pasado tratando de automatizar la creación de los certificados y sus correspondientes firmas para la VPN, sin ir más lejos. Un delay de un par de segundos suele ser suficiente. Mira si a la hora de generar el fichero te pasa lo mismo, que entre la escritura y la lectura no ha dado tiempo a que el fichero “cierre” y te de problemas por eso, especialmente, si el log es grande y pesado.

Saludos!
 
Script para generar ficheros de backup (.rsc y .backup) y enviar por email a nuestra cuenta. Se puede programar en "scheduler" con la frecuencia que deseemos.

Bash:
:local sysname [/system identity get name]
:local textfilename
:local backupfilename
:local time [/system clock get time]
:local date [/system clock get date]
:local newdate "";
:for i from=0 to=([:len $date]-1) do={ :local tmp [:pick $date $i];
:if ($tmp !="/") do={ :set newdate "$newdate$tmp" }
:if ($tmp ="/") do={}
}
#check for spaces in system identity to replace with underscores
:if ([:find $sysname " "] !=0) do={
:local name $sysname;
:local newname "";
:for i from=0 to=([:len $name]-1) do={ :local tmp [:pick $name $i];
:if ($tmp !=" ") do={ :set newname "$newname$tmp" }
:if ($tmp =" ") do={ :set newname "$newname_" }
}
:set sysname $newname;
}
:set textfilename ($"newdate" . "-" . $"sysname" . ".rsc")
:set backupfilename ($"newdate" . "-" . $"sysname" . ".backup")
:execute [/export file=$"textfilename"]
:execute [/system backup save name=$"backupfilename"]
#Allow time for export to complete
:delay 2s

#email copies
:log info "Emailing backups"
/tool e-mail send to="destinatario@gmail.com" from="Router Mikrotik" subject="\F0\9F\92\BE [Config Backup] $sysname $time" file=$"textfilename"
#Send as different subjects to force GMail to treat as new message thread.
:local time [/system clock get time]
/tool e-mail send to="destinatario@gmail.com" from="Router Mikrotik" subject="\F0\9F\92\BE [Config Backup] $sysname $time" file=$"backupfilename"
#Allow time to send
:delay 10s

#delete copies
/file remove $textfilename
/file remove $backupfilename

#Telegram
:local DeviceName [/system identity get name];
:local MessageText "\F0\9F\92\BE $DeviceName: Config Backups OK $TelegramMessageText";
:local SendTelegramMessage [:parse [/system script  get MyTGBotSendMessage source]];
$SendTelegramMessage MessageText=$MessageText;

Y para "rizar el rizo" los correos adjuntos que cumpla alguna condición en GMAIL podemos guardarlos automáticamente en Google Drive y de esta forma los tendremos a buen recaudo. Yo los almaceno durante 30 días y luego los borro una vez que empieza el nuevo mes.

Tenéis la info del proceso aquí: https://www.solvetic.com/tutoriales/article/1661-guardar-correos-gmail-automaticamente-google-drive/

S@lu2!
Hola, con este sistema no me falla en envío de mail, pero el sistema que tenias antes me gustaba mas para no depender de la configuracion de email en el MKT.
Una pregunta, el código que tenias antes lo sigues teniendo? me lo puedes pasar? creo que ví una diferencia y quería probarlo y no tengo tú código anterior Gracias y mis disculpas por molestar tanto.

Saludos
 
Hola, con este sistema no me falla en envío de mail, pero el sistema que tenias antes me gustaba mas para no depender de la configuracion de email en el MKT.
Una pregunta, el código que tenias antes lo sigues teniendo? me lo puedes pasar? creo que ví una diferencia y quería probarlo y no tengo tú código anterior Gracias y mis disculpas por molestar tanto.

Saludos
Si claro, aquí te lo dejo.
Depúralo y si consigues algo interesante, lo puedes compartir, ok?
Ya me cuentas.

Bash:
:local sysname [/system identity get name]
:local textfilename
:local backupfilename
:local time [/system clock get time]
:local date [/system clock get date]
:local newdate "";
:for i from=0 to=([:len $date]-1) do={ :local tmp [:pick $date $i];
:if ($tmp !="/") do={ :set newdate "$newdate$tmp" }
:if ($tmp ="/") do={}
}
#check for spaces in system identity to replace with underscores
:if ([:find $sysname " "] !=0) do={
:local name $sysname;
:local newname "";
:for i from=0 to=([:len $name]-1) do={ :local tmp [:pick $name $i];
:if ($tmp !=" ") do={ :set newname "$newname$tmp" }
:if ($tmp =" ") do={ :set newname "$newname_" }
}
:set sysname $newname;
}
:set textfilename ($"newdate" . "-" . $"sysname" . ".rsc")
:set backupfilename ($"newdate" . "-" . $"sysname" . ".backup")
:execute [/export file=$"textfilename"]
:execute [/system backup save name=$"backupfilename"]

#Allow time for export to complete
:delay 2s

#email copies
:log info "Enviado correos de backups"

# START Send Email Module for .RSC
    :local SendTo "destinatario@gmail.com";
    :local Subject "\F0\9F\92\BE [Config Backup] $sysname $time";
    :local MessageText "";
    :local FileName "$textfilename";
    :local SendEmail [:parse [/system script get SendEmailFunction source]];
    $SendEmail SendTo=$SendTo TextMail=$MessageText Subject=$Subject FileName=$FileName;
# END Send Email Module for .RSC

#Send as different subjects to force GMail to treat as new message thread.
:local time [/system clock get time]
:delay 2s

# START Send Email Module for .BACKUP
    :local SendTo "destinatario@gmail.com";
    :local Subject "\F0\9F\92\BE [Config Backup] $sysname $time";
    :local MessageText "";
    :local FileName "$backupfilename";
    :local SendEmail [:parse [/system script get SendEmailFunction source]];
    $SendEmail SendTo=$SendTo TextMail=$MessageText Subject=$Subject FileName=$FileName;
# END Send Email Module for .BACKUP

#Allow time to send
:delay 10s

#delete copies
/file remove $textfilename
/file remove $backupfilename

# START Send Telegram Module
    :local DeviceName [/system identity get name];
    :local MessageText "\F0\9F\92\BE <b>$DeviceName:</b> Config Backups OK $TelegramMessageText";
    :local SendTelegramMessage [:parse [/system script  get MyTGBotSendMessage source]];
    $SendTelegramMessage MessageText=$MessageText;
#END Send Telegram Module
 
Última edición:
Si claro, aquí te lo dejo.
Depúralo y si consigues algo interesante, lo puedes compartir, ok?
Ya me cuentas.

Bash:
:local sysname [/system identity get name]
:local textfilename
:local backupfilename
:local time [/system clock get time]
:local date [/system clock get date]
:local newdate "";
:for i from=0 to=([:len $date]-1) do={ :local tmp [:pick $date $i];
:if ($tmp !="/") do={ :set newdate "$newdate$tmp" }
:if ($tmp ="/") do={}
}
#check for spaces in system identity to replace with underscores
:if ([:find $sysname " "] !=0) do={
:local name $sysname;
:local newname "";
:for i from=0 to=([:len $name]-1) do={ :local tmp [:pick $name $i];
:if ($tmp !=" ") do={ :set newname "$newname$tmp" }
:if ($tmp =" ") do={ :set newname "$newname_" }
}
:set sysname $newname;
}
:set textfilename ($"newdate" . "-" . $"sysname" . ".rsc")
:set backupfilename ($"newdate" . "-" . $"sysname" . ".backup")
:execute [/export file=$"textfilename"]
:execute [/system backup save name=$"backupfilename"]

#Allow time for export to complete
:delay 2s

#email copies
:log info "Enviado correos de backups"

# START Send Email Module for .RSC
    :local SendTo "destinatario@gmail.com";
    :local Subject "\F0\9F\92\BE [Config Backup] $sysname $time";
    :local MessageText "";
    :local FileName "$textfilename";
    :local SendEmail [:parse [/system script get SendEmailFunction source]];
    $SendEmail SendTo=$SendTo TextMail=$MessageText Subject=$Subject FileName=$FileName;
# END Send Email Module for .RSC

#Send as different subjects to force GMail to treat as new message thread.
:local time [/system clock get time]
:delay 2s

# START Send Email Module for .BACKUP
    :local SendTo "destinatario@gmail.com";
    :local Subject "\F0\9F\92\BE [Config Backup] $sysname $time";
    :local MessageText "";
    :local FileName "$backupfilename";
    :local SendEmail [:parse [/system script get SendEmailFunction source]];
    $SendEmail SendTo=$SendTo TextMail=$MessageText Subject=$Subject FileName=$FileName;
# END Send Email Module for .BACKUP

#Allow time to send
:delay 10s

#delete copies
/file remove $textfilename
/file remove $backupfilename

# START Send Telegram Module
    :local DeviceName [/system identity get name];
    :local MessageText "\F0\9F\92\BE <b>$DeviceName:</b> Config Backups OK $TelegramMessageText";
    :local SendTelegramMessage [:parse [/system script  get MyTGBotSendMessage source]];
    $SendTelegramMessage MessageText=$MessageText;
#END Send Telegram Module
Solucionado @Universo2021
Cambia el valor de las variables por las señaladas en amarillo y tendrás operativo el script de la forma anterior (a mi me gusta más por la estructura del código).

1628274651393.png


S@lu2.
 
Limitar el logging del router a 100 líneas
Código:
/system logging action
set 0 memory-lines=100

borrarlo con un script que se pueda ejecutar manualmente desde /system scripts
Código:
/system logging action set memory memory-lines=1
/system logging action set memory memory-lines=100

programarlo para que se ejecute cada noche a las 12
Código:
add interval=1d name=logging on-event=clear-logs \
policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \
    start-date=jan/01/2021 start-time=00:00:00
Hola, yo tengo el historial LOG por defecto en 1000 líneas, La pregunta es, si pongo ...

/system logging action set memory memory-lines=1;
/system logging action set memory memory-lines=1000;

¿Con eso borraría todo aún teniendo menos de 1000 líneas el historial LOG cuando lo ejecute? Mi objetivo es dejarlo por defecto en 1000 y hacer un backup cada x tiempo de ese log pero luego borrarlo y la duda era si teniendo menos de 1000 líneas el log se borraría igual. No se si me esplico. Gracias.

Saludos
 
Hola, yo tengo el historial LOG por defecto en 1000 líneas, La pregunta es, si pongo ...

/system logging action set memory memory-lines=1;
/system logging action set memory memory-lines=1000;

¿Con eso borraría todo aún teniendo menos de 1000 líneas el historial LOG cuando lo ejecute? Mi objetivo es dejarlo por defecto en 1000 y hacer un backup cada x tiempo de ese log pero luego borrarlo y la duda era si teniendo menos de 1000 líneas el log se borraría igual. No se si me esplico. Gracias.

Saludos
Sí, publique un script similar, pero con 100 líneas. Y hace justo eso que dices, cepillarselas, dado que el equipo no tiene un “clear logs” como tal.

Saludos!
 
Hola, buenos días.
Estuve viendo la API de Telegram y no encuentro o no se que parámetro usar para enviar archivos mediante script, ¿Sabéis algo si es posible y como? Muchas gracias.

Saludos
 
Arriba