Algo que surgió anoche en la clase de Linux (Crontab), fue casualmente «poder hacer un backup automático y que lo envie a nuestro mail». Todavía no aprendimos Bash Scripting / Pyton / Perl o bien para el que esta mi situación, tenemos la alternativa de ejecutar un script PHP.
Inicialmente este script hacia un dump de la base de datos mysql y enviaba el archivo .sql via mail. Aca lo posteo con algunas modificaciones para que cada uno lo adapte a sus necesidades.
En este ejemplo vamos a imprimir el syslog (tail syslog) y enviarlo via mail como archivo adjunto.
La funcion en PHP para ejecutar un comando Linux es:
system(«tu comando»); // Ej: system(«ps -fea»);
*En este ejemplo listamos los procesos.
Sabiendo esto, el código del script PHP podría ser algo asi:
<?php //// Script: Nicolas Daitsch 24 de noviembre de 2011 //// http://tech-nico.com/blog ////////////// CONFIGURACION ////////////////////////// $sendto = "Webmaster <tuemail@gmail.com>"; // DESTINO $sendfrom = "Log Diario Servidor <logs@tuempresa.com>"; // ORIGEN $sendsubject = "Log Diario mi servidor"; // ASUNTO $bodyofemail = "Aca esta el log que genero el Crontab."; // MENSAJE $COMANDO_LINUX = "tail /var/log/syslog"; // COMANDO //////////////////////////////////////////////////////// $backupfile = "syslog_". date("Y-m-d") . '.txt'; system($COMANDO_LINUX > $backupfile); include('Mail.php'); include('Mail/mime.php'); $message = new Mail_mime(); $text = "$bodyofemail"; $message->setTXTBody($text); $message->AddAttachment($backupfile); $body = $message->get(); $extraheaders = array("From"=>"$sendfrom", "Subject"=>"$sendsubject"); $headers = $message->headers($extraheaders); $mail = Mail::factory("mail"); $mail->send("$sendto", $headers, $body); //unlink($backupfile); ?>
Editamos la sección que dice //// CONFIGURACION y escribimos nuestros valores.
Luego instalamos el modulo PEAR para envio de mails con PHP:
# apt-get install php-mail php-mail-mime php-mail-mimedecode
Editamos el Crontab:
# crontab -e
Agregamos esta linea al final, guardamos y salimos:
08 12 * * * /usr/bin/php -f /var/www/backup.php > /root/cronerrors.txt 2>&1
Explicamos lo que hace esta linea:
- (08 12 * * *) Todos los dias a las 12:08 PM
- (/usr/bin/php -f) Ruta del interprete PHP en Debian/Ubuntu. Flag «-f» Ejecutar un archivo PHP.
- (/var/www/log_script/log_send.php) Ruta del Script
- (> /root/cronerrors.txt 2>&1) Redirecciono la salida de error hacia un archivo de texto en /root. Esto también puede ser /home/usuario/errores.log