Posts Tagged ‘linux’

  • Como Usar FTP en Shell Script

    2

    A diario hago backup en mis servers pero los archivos quedan residentes en las mismas máquinas. Obviamente mientras el backup esté mas lejos de los datos originales menores son las probabilidades de no recuperarse de un desastre computacional.

    Lo ideal seria hacer una transmisión FTPS o SFTP si estás preocupado por algun sniffer o similar, pero bueno, aquí vamos a ver la solución fácil y rápida con un shell script muy sencillo.

    #!/bin/sh
    HOST='www.myserver.com'
    USER='myuser'
    PASS='mypassword'
    #voy a hacer backup del folder creado ayer
    YESTERDAY=$(date --date='1 day ago' +%Y%m%d)
    
    # pensemos que dejamos los backups diariamente en este path
    # los cuales estan en folders con formato fecha cual
    # 20100227 (YYYYMMDD)
    cd /home/myuser/backups/
    # creo localmente un folder con el mismo nombre
    mkdir $YESTERDAY
    cd $YESTERDAY
    
    ftp -n $HOST <<END_SCRIPT
    quote USER $USER
    quote PASS $PASS
    # aca vamos a la misma locacion pero en el server
    cd /home/myuser/backups/$YESTERDAY
    # aca es donde bajamos el archivo que queremos backupear
    get backup.tar
    quit
    END_SCRIPT
    exit 0
    

    Y listo, solo nos falta una entrada en el cron para correr esto a diario. Para ello:

    crontab -e

    Entonces agregamos el script para ser llamado diariamente

    0 1 * * * /usr/share/scripts/mybackupscript.sh

    Esto soluciona grandes dolores de cabeza con mínimo esfuerzo. Que lo disfruten!

  • Como Parsear un Email en Java

    0

    Estoy trabajando en un sistema que recibe emails en un Sendmail y este mediante CURL redirecciona a un Tomcat Server para ejecutar comandos. Todo esto es porque lso sres clientes no puden hacer un miserable webservice. Como la verdad shell script no es mi fuerte, opté por redireccionar mediante sendmail alias a un script el cual nuevamente redirecciona usando CURL a una URL.

    El shell

    #!/bin/sh
    
    TEMP_FILE=$(date +%k%M%S%N)
    URL=http://someserver/somefile
    
    #writes to disk the email file
    while read line; do
      echo $line >> $TEMP_FILE
    done
    
    curl -F "file=@$TEMP_FILE" $URL
    
    #wipes out the temp file
    rm -rf $TEMP_FILE
    

    A mi aplicación Java viene como si fuera un FileUpload común y corriente dentro de un servlet o simil. Utilizo apache file upload.

    
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      FileItemFactory factory = new DiskFileItemFactory();
      ServletFileUpload upload = new ServletFileUpload(factory);
      List items = upload.parseRequest(request);
      Iterator iter = items.iterator();
      while (iter.hasNext()) {
        FileItem item = (FileItem) iter.next();
        if (!item.isFormField()) { // here is the file!
          myFile = item;
        }
      }
    
      // now process the file
    

    Entonces tenemos con el código de arriba solucionado el recibir el archivo proveniente del CURL request. Ese archivo es plain text y contiene toda la info que contiene un email, header y body.

    From root@myserver.com Thu May 13 14:21:16 2010
    Received: from myserver.com (localhost.localdomain [127.0.0.1])
    by myserver.com (8.13.8/8.13.8) with ESMTP id o4DILgiri383703
    for ; Thu, 13 May 2010 14:21:16 -0400
    Received: (from root@localhost)
    by myserver.com (8.13.8/8.13.8/Submit) id o4DIGIUR89844
    for some@otherserver.com; Thu, 13 May 2010 14:21:16 -0400
    Date: Thu, 13 May 2010 14:21:16 -0400
    From: root 
    To: some@otherserver.com
    Subject: some subject
    Message-ID: <20100513182116.GA873@myserver.com>
    Mime-Version: 1.0
    Content-Type: text/plain; charset=us-ascii
    Content-Disposition: inline
    User-Agent: Mutt/1.4.2.2i
    
    here the body of the message
    

    Y aca viene la gran utilidad, para evitar parsear el mensaje y estar luchando con el reply-to, from , y el body construimos un MimeMessage en java el cual nos permite acceder a todos los campos del email sin mayores dolores de cabeza.

    Creamos un property y un session para poder pasarlos como parametros al MimeMessage

    Properties properties = System.getProperties();
    //properties.put("mail.transport.protocol", "smtp"); NO SE SI ES NECESARIO
    //properties.put("mail.smtp.host", "localhost");  NO SE SI ES NECESARIO
    Session session = Session.getDefaultInstance(properties, null);
    

    Y ahora parseamos el mensaje :D

    StringBufferInputStream stream = new StringBufferInputStream(email);
    MimeMessage message = new MimeMessage(session, stream);
    

    Y podemos acceder a todos los campos del email

    message.getSubject();
    message.getSender();
    message.getSenderDate();
    message.getContent();
    //blablabla
    

    Utilizo la API de Java Mail. También quiero agradecer a Pedro Prez de Keetup por la ayuda con CURL.

  • Como Zipear y Almacenar Log Files

    0

    Si tienen una aplicación en producción es sumamente importante no borrar los logs jamás. Por qué ? Porque SIEMPRE van a encontrar una situación donde van a necesitar saber en que momento pasó tal cosa. Hay una ley que siempre se cumple,

    Los backups nunca se necesitan hasta el momento que perdiste todo, ahi si no lo tenés empezá a buscar otro laburo.

    Un ejemplo claro es un reclamo de un cliente..

    Cliente – Hola, me llego un cargo de un servicio que no pedí.
    Yo – WTF!

    Inmediatamente solicito al cliente datos para poder ubicar en mis logs la acción exacta que generó esa factura y resolver el problema.

    En mi caso utilizo varios niveles de log partiendo del más detallista (SQL) hasta el más evidente (ERROR). Actualmente Memudoya.com está generando 100 MB de logs diarios, lo que nos dá casi unos 3GB de logs al mes. Según que tipo de hosting estemos contratando ésto puede ser un dolor de cabeza y nos tienta a borrar logs que consideramos viejos.

    Tengo conocimiento de que Google por ejemplo, guarda logs de apache desde al menos el 2007. Es increíble, pero si. Imagínense la cantidad de información que están backupeando a diario.

    Para archivar los logs hice un shell script muy sencillo que corre a diario con un CRON para almacenar los logs como ZIP. También me di cuenta que generalmente lo que más querés ver son los logs del día, asi que la idea es que este script archive los logs de ayer.

    Algo de código:

    #!/bin/sh
    
    #declare yesterday
    DATE=$(date --date='1 day ago' +%Y-%m-%d)
    
    OLD=/var/log/myapp/old
    
    mv /var/log/myapp/mydomain.$DATE* $OLD
    
    zip -m9 /usr/share/mybackup/$DATE-myapp.zip $OLD/*
    

    No es para nada complicado, pero es SUPER útil. Espero les sirva.

  • Como Cambiar La Version de Java en Ubuntu Linux

    0

    Despues de haber instalado una JVM nueva hay que ejecutar en Ubuntu un comando para que actualize todos los paths default para poder ejecutar los programas con esa JVM.

    Primero vamos a ejecutar el siguiente comando para ver las diferentes alternativas:

    sudo update-java-alternatives -l

    Quiza obtenemos un print como este:

    root@gsovmfmsdev04:~# update-java-alternatives -l
    java-6-sun 63 /usr/lib/jvm/java-6-sun
    java-gcj 1042 /usr/lib/jvm/java-gcj

    Ahora ejecutamos el comando set para utilizar nuestra alternativa deseada:

    update-java-alternatives -s java-6-sun

    Ahora podemos ver nuestra nueva version de esta manera:

    java -version

    Eso es todo

  • GD Library Error: imagecreatetruecolor does not exist

    0

    Si están utilizando el image resizer de PHP en ubuntu parece que por default si instalas a mano php5 no trae las librerias GD. Fácilmente corregimos este error instalando lo faltante.

    sudo apt-get install php5-gd
Page 1 of 41234»