martes, 26 de marzo de 2013
Portar Tus Scripts Shell A Entorno Web
Asi como lo lees, si quieres mostrar o implementar tus Shell Scripts en un entorno web ya sea local o remoto, y de esta manera la ejecucion de estos poder ser visualizados online sin problemas, existen maneras de poder ofrecer esta novedad.
Trabajo como Administrador de Servidores Linux, y aunque esto en fondo no tenga mucha relacion con las tareas de un administrador linux (excepto la creacion de los shell scripts), me he topado con la solicitud de si era posible hacer que un shell script o perl script o python script o hasta un objeto compilado en lenguaje C pudiese ejecutarse y ver el resultado de todo via web. Bueno, aunque pareciese algo imposible al principio, si, si se puede. La manera de hacerlo, es ejecutando estos scripts mediante CGI web.
CGI es una tecnologia que utilizan los servidores webs, como por ejemplo Apache, Lighttpd, entre otros. Para realizar esta prueba necesitas tener el servidor Apache instalado en tu PC o instalado en un servidor donde vayas a probar esto, la prueba se realizara en un sistema operativo con GNU/Linux aunque asumo que en Windows igual podra funcionar, pero vas a requerir el interprete necesario para ejecutar tu script en el lenguaje que lo hayas creado, por ejemplo si tu script es PL necesitaras el interprete Perl, si tu script es Py necesitaras el interprete Python, etc. Pero, si haces esta prueba en linux, obvia la necesidad de interpretes ya que estos por defecto suelen venir instalados.
En mi ejemplo, utilizare un script de bash, el cual tiene el siguiente codigo:
#!/bin/bash
echo "Content-type: text/html"
echo ""
echo '<html><head><title>Proyecto Prueba</title><body>'
echo '<h30><strong>Hola Mundo</h30>'
echo '<br>'
echo '<hr>'
exit 0
Guarda el anterior shell script con el nombre que gustes, en mi caso le llame prueba, sin ninguna extension. Ahora, copiemos prueba en la ruta CGI de nuestro servidor Apache (Usualmente esta ruta esta en /var/www/cgi-bin , sin embargo puede ser que este configurada en otra ubicacion, revisa el archivo httpd.conf para que verifiques la ruta exacta). Una vez copiado el shell script a la ruta, hay que darle permisos de ejecucion:
root# chmod +x prueba
Una vez cometido lo anterior, vas a abrir tu navegador y colocaras la IP de tu servidor Apache y la ruta del archivo dentro del directorio CGI, justo como muestra la imagen siguiente:
Recuerda sustituir la IP de la barra direccional por la IP correspondiente en tu caso. Si todo salio de forma correcta deberas ver una imagen como la anterior. Tambien puedes agregar tablas HTML como el siguiente codigo demuestra:
#!/bin/bash
echo "Content-type: text/html"
echo ""
echo '<html><head><title>Proyecto Prueba</title><body>'
echo '<h30><strong>Hola Mundo</h30>'
echo '<br><div align="center">'
echo '<table width=60% bgcolor="yellow">'
echo '<tr><th bgcolor="orange">Proyecto</th><th>Prueba</th>'
echo '<tr><td bgcolor="white">Uno</td><td>Dos</td></tr>'
echo '</table>'
echo '</div>'
echo '<br>'
echo '<hr>'
exit 0
Lo cual mostraria un resultado como:
Pensaras que aun no tiene mucha utilidad con solo crear paginas no dinamicas con HTML. Sin embargo, si tu logica de programar es amplia, perfectamente puedes sustituir las entradas de esa tabla HTML por registros de una base de datos. O Podrias con shell script leer la entradas de un archivo de texto que se actualiza cada 60 segundos y refrescar el navegador con un meta-tag cada 60 segundos y asi exponer via web mediante un shell script la salida del archivo de texto. Por ejemplo el siguiente shell script:
#!/bin/bash
echo "Content-type: text/html"
echo ""
echo '<meta http-equiv="refresh" content="30" >'
fecha=`date +%Y/%m/%d`
cat /home/metro_ctl/log/CAR$(date '+%d%m%Y').log |grep "===F" > /tmp/copia.txt
awk -f calculo.awk < /tmp/copia.txt > /tmp/resultado.txt
sed -i 's/-//g' /tmp/resultado.txt 2>/dev/null
algo=$(awk '{ total += $3; contador++ } END { print total/contador }' /tmp/resultado.txt 2>/dev/null)
alguito=$(cat /tmp/resultado.txt | grep $(date "+%Y/%H") | awk '{ total1 += $3; contadorx++ } END { print total1/contadorx }' 2>/dev/ null)
echo '<html>'
echo '<head>'
echo '<body>'
echo '<div align="center"><strong><h30>PROMEDIO DE TIEMPO DE CARGA Y CAPTURA</h30></div>'
echo '<br><br>'
echo '<div align="center">'
echo '<table width=60% bgcolor="#A9BCF5" cellpading=10>'
echo '<tr><th>Fecha</th>'
echo '<th>Promedio Total Del Dia</th>'
echo '<th>Promedio Ultima Hora</th>'
echo '</tr>'
echo '<tr bgcolor="#E0F2F7"><td><strong> '$fecha'</td>'
echo '<td> '$algo' Minutos</td>'
echo '<td> '$alguito' Minutos</td>'
echo '</tr>'
echo '<tr bgcolor="#E0F2F7"><td><strong> '$fecha'</td>'
echo '<td> '$algo' Minutos</td>'
echo '<td> '$alguito' Minutos</td>'
echo '</tr>'
echo '</table>'
echo '</body>'
echo '</head>'
echo '</html>'
Lee un archivo de texto que se actualiza cada 60 segundos, filtra unas entradas, saca unos calculos con AWK y imprime la salida final en una tabla HTML via web, y la pagina web se actualiza automaticamente cada 30 segundos por el meta-refresh. Quedando una salida como la siguiente:
Son inumerables las maneras como puedes exponer ciertos trabajos en un entorno web sin ser necesariamente programador profesional de un lenguaje web dinamico.
Buen Provecho.
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario