lunes, 29 de octubre de 2012

Correos electrónicos periódicos desde mi PC

MAIL

A veces parece interesante que nuestra máquina nos informe periódicamente de lo que en ella se cuece y enredando lo he conseguido. Para ello vamos a usar el comando mail que seguramente ya esté en nuestro sistema.
Para usar el comando mail nos vamos a la consola y lo llamamos

$ mail destinocorreo@dominio.com
Subject: Aquí ponemos el asunto del mensaje de correo
Y aquí añadimos todo el texto del mensaje
Si damos a enter trabajará como un editor de texto y pasará a otra línea. Necesitamos poner un punto solo en una línea y al dar a enter se entiende que el texto del correo ha terminado.
.
Cc: Por si queremos mandar copia al carbón a otro destinatario distinto
$

Si lo que queremos es mandar el contenido de un archivo sería así
cat archivo | mail ­-s "Asunto" correo@dominio.com

Otros ejemplos:


Mandar el texto pepe con nombre de asunto Asunto a la cuenta correo@dominio.com
echo "pepe" | mail ­s "Asunto" correo@dominio.com

Y si lo queremos enviar a varios destinatarios de correo:
echo "pepe" | mail ­s "Asunto" correo@dominio.com ­c correo2@dominio.com ­c 
correo3@dominio.com 

EXIM


Si queremos mandar correos a un destinatario fuera de nuestra red debemos instalar exim4 que no es otra cosa que un servidor de correo.


Lo primero que tenemos que hacer es asegurarnos que lo tenemos instalado:

apt-­get install exim4 exim4­-config

Una vez que lo hayamos instalado, aparecerá una pantalla de configuración. Si no aparece,
podremos acceder a ella en cualquier momento ejecutando el comando:

dpkg­reconfigure exim4-­config

Será entonces cuando nos pregunte por distintas opciones de configuración:

­ ¿Quiere utilizar archivos separados para la configuración?
Respondemos SI
­ ¿De qué forma queremos configurar nuestro servidor?
Respondemos “enviar por SMARTHOST, y recibir por SMTP o Fetchmail”
­ Escriba el nombre del sistema:
Respondemos con nuestro dominio: miDominio.com
­ Escriba la dirección IP desde donde va a atender las conexiones al SMTP:
Respondemos: 127.0.0.1
­ Escriba otros servidores destino que el SMTP será aceptado:
Aquí no respondemos nada, lo dejamos en blanco.
­ Sistemas a los que reenviar emails ?
No piques, esto también hay que dejarlo en blanco.
Escribe el sistema que gestionará el correo saliente de este sistema:
(Aquí escribimos nuestro servidor SMTP remoto, por ejemplo...)
smtp.miDominio.com
En mi caso voy a utilizar una cuenta de gmail, el servidor SMTP de gmail hay que especificarlo
junto con el puerto que va a utilizar, y sería esto: smtp.gmail.com::587 (ojo que lleva dos simbolos
de dos puntos antes del puerto)
­ ¿Quiere ocultar el nombre local del sistema local del email saliente?
Pues NO.
­ Quiere cachear las peticiones DNS para ahorrar ancho de banda?
Pues NO.
Bien, hasta ahora tenemos algunos parámetros básicos configurados, pero no hemos indicado el
usuario ni la contraseña con el que queremos autentificarnos para enviar emails. Si probásemos a
enviar emails, seguramente nuestro servidor remoto recibiría un email de un tal root@localhost y
nos lo rechazaría.

Vamos a configurar los datos importantes:
Editamos el archivo /etc/exim4/passwd.client y escribimos algo como esto:
smtp.miDominio.com:usuario:contraseña
En nuestro caso que queremos utilizar la cuenta de gmail, deberíamos poner algo como esto:
gmail­smtp.l.google.com:micuentadecorreo@gmail.com:contraseña
*.google.com:micuentadecorreo@gmail.com:contraseña
smtp.gmail.com:micuentadecorreo@gmail.com:contraseña
De esta manera, sea cual sea el nombre del servidor SMTP que utilicemos en gmail, le enviaremos
los parámetros correctos y nos aceptará el envío.

Hay que verificar que el archivo /etc/exim4/passwd.client pertenezca al usuario root y grupo Debian-exim y que sólo pueda ser leído por ellos (por defecto está así). En caso contrario hay que ejecutar:
sudo chown root:Debian-exim /etc/exim4/passwd.client
sudo chmod 640 /etc/exim4/passwd.client

Si estamos configurando nuestra cuenta de Gmail, hay que indicarle (otra vez) que el envío debe
hacerlo por el puerto 587 en lugar del estandar (el 25), por lo que tendremos que editar el archivo:
/etc/exim4/conf.d/transport/30_exim4­config_remote_smtp_smarthost
y justo encima de la línea que dice algo como: (hosts_try_auth...) añadir lo siguiente:
port=587

Por último, vamos a reiniciar el servidor de correo para que que carge los cambios
sudo /etc/init.d/exim4 restart

Ya deberíamos haber conseguido poder mandar correos a internet, ahora lo siguiente

CRON Y CRONTAB

¿Que es cron? Pues no es otra cosa que un administrador regular de procesos en segundo plano (demonio) que ejecuta procesos o guiones a intervalos regulares (por ejemplo, cada minuto, día, semana o mes). Los procesos que deben ejecutarse y la hora en la que deben hacerlo se especifican en el fichero crontab.

Crontab es un simple archivo de texto que guarda una lista de comandos a ejecutar en un tiempo 
especificado por el usuario. Crontab verificará la fecha y hora en que se debe ejecutar el script o el 
comando, los permisos de ejecución y lo realizará en el background. Cada usuario puede tener su 
propio archivo crontab, de hecho el /etc/crontab se asume que es el archivo crontab del usuario root, 
cuando los usuarios normales (e incluso root) desean generar su propio archivo de crontab, entonces 
utilizaremos el comando crontab.
Pues eso, por si no lo has pillado todavía, es un archivo de texto en que le indicamos el periodo (cada minuto, cada semana, cada año, ...) el usuario y la tarea a ejecutar.

Vamos empezando con un ejemplo simple.
Vamos a automatizar la actualización de un sistema. Primero que nada haremos un script. Este script será llamado por cron y contendrá todas las instrucciones que queremos que haga, por lo tanto es necesario probarlo en varios casos y de varias formas antes de incluirlo a cron, un sencillo script de actualización como este:

#!/bin/bash
apt-­get update & ap-­get ­-y upgrade

Guardamos el script como actualizacion.sh (ej. directorio scripts tu home). Cambiamos los 
permisos de ejecucion del dichoso script con:

chmod a+x ~/scripts/actualizacion.sh

Ejecutamos el script un par de veces para verificar que todo ejecute sin problemas, modificamos lo 
necesario (no debe contener errores, si no cron solo repetira un error una y otra vez). Ahora a 
agregar la tarea a nuestro crontab

Ejecutamos la edición del crontab con crontab -­e, en algunas distros (como ubuntu) nos da la opcion 
de elegir el editor de textos que deseemos o editamos el archivo en /etc/crontab. El archivo crontab nos mostrará algo así.

# m h dom mon dow user command

donde:
m corresponde al minuto en que se va a ejecutar el script, el valor va de 0 a 59
h la hora exacta, se maneja el formato de 24 horas, los valores van de 0 a 23, siendo 0 las 
12:00 de la medianoche.
Dom hace referencia al día del mes, por ejemplo se puede especificar 15 si se quiere 
ejecutar cada dia 15
dow significa el día de la semana, puede ser numérico (0 a 7, donde 0 y 7 son domingo) o 
las 3 primeras letras del día en inglés: mon, tue, wed, thu, fri, sat, sun.
User define el usuario que va a ejecutar el comando, puede ser root, u otro usuario diferente 
siempre y cuando tenga permisos de ejecución del script.
Command refiere al comando o a la ruta absoluta del script a ejecutar, 
ejemplo:/home/usuario/scripts/actualizar.sh, si acaso llama a un script este debe ser 
ejecutable

Para que quedara claro unos cuantos ejemplos de tareas de cron explicados:

15 10 * * * usuario /home/usuario/scripts/actualizar.sh
Ejecutará el script actualizar.sh a las 10:15 a.m. todos los días

15 22 * * * usuario /home/usuario/scripts/actualizar.sh
Ejecutará el script actualizar.sh a las 10:15 p.m. todos los días

00 10 * * 0 root apt­get ­y update Usuario root
Ejecutará una actualización todos los domingos a las 10:00 a.m

45 10 * * sun root apt­get ­y update
Usuario root ejecutará una actualización todos los domingos (sun) a las 10:45 a.m

30 7 20 11 * usuario /home/usuario/scripts/actualizar.sh
El día 20 de noviembre a las 7:30 el usuario correra el script

01 * * * * usuario /home/usuario/scripts/molestorecordatorio.sh
Un molesto recordatorio cada minuto de cada hora todos los días (NO recomendable).

Igual se pueden manejar rangos especiales:
30 17 * * 1,2,3,4,5
A las 5:30 de la tarde todos los días de lunes a viernes.

00 12 1,15,28 * *
A las 12 del día todos los días primero, quince y 28 de cada mes (ideal para nóminas)

Si esto resulta confuso, crontab maneja cadenas especiales para definir estos rangos.
@reboot Ejecuta una vez, al inicio
@yearly ejecuta sólo una vez al año: 0 0 1 1 *
@annually igual que @yearly
@monthly ejecuta una vez al mes, el día primero: 0 0 1 * *
@weekly Semanal el primer minuto de la primer hora de la semana. 0 0 * * 0′′.
@daily diario, a las 12:00A.M. 0 0 * * *
@midnight igual que @daily
@hourly al primer minuto de cada hora: 0 * * * *
Su uso es muy sencillo.
@hourly usuario /home/usuario/scripts/molestorecordatorio.sh
@monthly usuario /home/usuario/scripts/respaldo.sh
@daily root apt­get update && apt­get ­y upgrade

Pues en nuestro caso creamos el archivo chivato en nuestra carpeta /home/usuario. El archivo chivato nos va a mandar el contenido del archivo log del sistema a nuestra cuenta de correo

$ cd /home/usuario
$ nano chivato
#!/bin/bash 
cat /var/log/secure | mail ­-s “log del sistema” micuentadecorreo@dominiomail.com
Le damos permisos de ejecución

$ chmod +x chivato

y nos queda así

­rwxr­xr­x 1 usuario usuario   62 2012­09­11 08:40 chivato 

Ahora editamos el archivo /etc/crontab y añadimos la tarea

# Correo-­e /var/log/secure 
0 8 * * * usuario /home/usuario/chivato

Esto es que todos los días a las 8:00 ejecute el archivo chivato
O.K.


No hay comentarios:

Publicar un comentario