Ejecución de scripts en modalidad "batch" y validar sintaxis

Muchas veces necesitamos correr procesos "batch" que se ejecutarán a determinada hora desde un cron (unix/linux) y no tienen ningún tipo de interacción con el usuario, a lo sumo, generarán un reporte de resultados del proceso en un log. Este tipo de procesos pueden ser tan variados como respaldos, transferencias de datos entre sistemas, envío masivo de mails a la base de usuarios, etc.

Por ejemplo:


30 13 * * *  enrique php /var/www/batch/sincronizarBases.php &>/dev/null

Aquí se ve la ejecución para el usuario enrique, el cual llegada las 13:30 hs ejecutará el comando php /var/www/batch/sincronizarBases.php y toda la salida de mensajes internamente será redireccionada a un archivo de log.

También se puede evitar tener que llamar desde consola el comando php y decirle internamente que el ejecutable es el binario de php, además de tener que darle permisos de ejecución al archivo en cuestión (chmod +x ), por lo que la invocación quedaría así (sin la invocación de php):

 30 13 * * *  enrique /var/www/batch/sincronizarBases.php &>/dev/null

y la primera línea de nuestro scripts debería ser:

#!/usr/bin/php -q

// código fuente


Bien podríamos usar otro tipo de lenguaje o simple scripting bash, pero tener todo un sistema desarrollado en PHP permite luego reusar componentes o clases dentro de estos scripts "batch", así que bien podemos seguir usando nuestro lenguaje base de desarrollo.

Como último detalle que quería comentarles, es que amén que siempre hay que probar todo en consola antes de agregarlo al crontab, sucede que si bien sabemos que funciona todo correctamente, a veces tenemos que hacer modificaciones al scripts y que probablemente luego no nos tomamos el trabajo de volver a revisar nuevamente. Para estas situaciones les dejo un pequeño "tips" que puede ser de ayuda con errores básicos que nos pueden suceder sin darnos cuenta:

Luego de editar nuestro fuente, podemos verificar la sintaxis básica del código, evitando por lo menos no cometer un error en algun ";" o similar (obviamente, esto no asegura que no hayamos cometido un error de lógica):

php -l sincronizarBases.php


No syntax errors detected in sincronizarBases.php

En caso contrario

Parse error: syntax error, unexpected T_INCLUDE in sincronizarBases.php on line 33
Errors parsing sincronizarBases.php 



Espero que les sea de utilidad ;-)

¿tienen alguna sugerencia más o experiencias en estos temas que quieran compartir?

[screencast] Cómo usar Zend Framework en Netbeans 6.9

Hace un buen tiempo que vengo usando Netbeans como IDE "todo terreno", tanto para PHP5 puro como para desarrollar bajo Zend Framework. Si bien usar Zend bajo Netbeans no aportaba ninguna ayuda especial, es muy bienvenido que lo hayan incorporado ahora con la nueva versión (ya puedes bajar la versión 6.9 Beta, en pocos días ya estará la versión final).

Aquí una explicación de los primeros pasos para sacarle el máximo de provecho:



¿y tú, ya lo probaste? ;-)

[SVN] Resolución de conflictos usando un IDE (Netbeans)

Dicen que una imagen vale más que mil palabras, así que me pareció bueno mostrarles algo que es relativamente "común" que suceda en un proyecto, y es, que existan conflictos entre las modificaciones de uno o más desarrolladores, muchas veces por modificar las mismas líneas de código en el mismo lapso de tiempo.

Los sistemas de versionado, si bien se encargan de mantener sincronizado un proyecto donde pueden trabajar muchas personas, en determinados casos no puede hacer "magia" y cuando se dan los conflictos (porque no sabe qué líneas deben quedar como definitivas) nos deja a nosotros la responsabilidad de decidir qué hacer.

En este caso veremos cómo luego de trabajar sobre un fuente, al intentar hacer un commit el IDE (en este caso Netbeans for PHP) me avisa que ya existieron cambios en el repositorio SVN, y que luego de hacer mi actualización local (update) me reporta que hay "conflictos" con los cambios.


Por lo general, usemos o no un IDE, ocurrirá lo siguiente:
  • nuestro fuente quedará marcado en las líneas que ocurrieron el conflicto (por lo tanto si estamos ejecutando este fuente, ahora dejará de funcionar y dará error de sintaxis)
  • y 3 archivos más, con la información de las líneas del problema (.mine, .r198 y .r241, estos últimos hacen referencia a las líneas del conflicto).

     En el caso de Netbeans (aunque en Eclipse es muy similar), nos posicionamos sobre el fuente en cuestión, botón derecho, Subversion > Resolve Conflicts... y nos desplegará la siguiente interfaz


    Mostrando en la parte superior ambos archivos, la versión local (izq) y la versión remota (der), y sobre cada una de ellas hay un botón de "Aceptar" para que nosotros decidamos cual de las dos se queda (descartando la opuesta) y podremos ver cómo va quedando la versión final en la parte inferior central.


    Aquí podemos visualizar cómo se vería si aceptáramos la versión del lado derecho (versión remota)



    Al finalizar de responder cual versión del conflicto queremos dejar nos preguntará si queremos finalmente salvar todos los cambios y marcar el archivo como "resuelto".



    Y conflicto solucionado, ahora podemos seguir adelante, no sin antes volver a charlar con el equipo de desarrollo para tratar de evitar estos problemas a futuro.

    Saludos! ;-)

    PHP Namespace Support in NetBeans IDE 6.8

    Interesante cómo va creciendo poco a poco las funcionalidades de Netbeans para PHP y cómo ya se asoma el soporte de PHP 5.3, como así también soporte para diversos frameworks PHP. Para tener en cuenta ;-)

    Entradas populares