Tag Archives: linux

Leer archivo mdb (access) de php en ubuntu

Por motivos de trabajo tengo que leer/escribir archivos de MS Access (*.mdb) utilizando PHP. Después de leer varios foros y documentos les dejo la solución que encontré.

Primero debemos instalar algunos software.


sudo aptitude install php5-odbc mdbtools libmdbtools libmdbodbc

Luego deben editar los siguientes archivos /etc/odbcinst.ini y /etc/odbc.ini


[MDBToolsODBC]
Description = MDB Tools ODBC drivers
Driver = /usr/lib/libmdbodbc.so.0
Setup =
FileUsage = 1
CPTimeout =
CPReuse =

En este archivo deben indicar el path del archivo .mdb que desen leer.


[DSS]
Description = DSS-TMP
Driver = MDBToolsODBC
Database = /home/stefano/DSS/DB.mdb

Luego para probar si la conexión esta correcta en la consola deben escribir


stefano@arda:~$ isql DSS

Y aparecerá un mensaje indicando que ya están conectados a su base de datos. Ahora sólo queda leer el archivo desde PHP para eso pueden usar el siguiente snippet.


".odbc_result($result,"TABLE_NAME");
}
?>

¿Cómo saber que programa esta usando algun puerto determinado?

A cualquier sysadmin le ha tenido la necesidad de saber que programa esta utilizando algún puerto específico en linux. Una solución a este problema es el uso del comando lsof su uso es sencillo.


stefano@bender:~$ sudo lsof -i TCP:7070
COMMAND  PID     USER   FD   TYPE DEVICE SIZE NODE NAME
java    6000 openfire   64u  IPv6  20495       TCP *:7070 (LISTEN)

Como podrán ver nos informa que comando ejecutado es java y el usuario es openfire, con esta información ya podemos estar mas tranquilos.

Mi propio logrotate

Tengo la siguiente estructura para almacenar los logs de los sitios que tiene el servidor sitio.tld/subdomino-<access|error>.log, necesitaba que cada uno los sitios tuviera su propio registro de estadisticas utilizando awstats, el problema es que no super como hacer que cada vez que se ejecutara el rotatelog se actualizaran todas las estadisticas para cada uno de los dominios. Por lo que decidí hacer mi pripio logrotate utilizando bash y cron, el script es el siguiente:


#! /bin/bash

/usr/lib/cgi-bin/awstats.pl -config=awstats -update

for i in $(ls /var/log/apache2/); do

cd /var/log/apache2/

if [ -d $i ]; then

#ejecutar awstats
cd /etc/awstats/
config=awstats.$i.conf
if [ -f $config ];then
/usr/lib/cgi-bin/awstats.pl -config=$i -update
fi

#ejecutar el rotate
cd /var/log/apache2/$i
for j in $(ls *.log); do
savelog -m777 -q $j

#reiniciar apache2
if [ -f "`. /etc/apache2/envvars ; echo ${APACHE_PID_FILE:-/var/run/apache2.pid}`" ]; then
/etc/init.d/apache2 reload > /dev/null
fi
done
else
#archivos sueltos
savelog -m777 -q $i
if [ -f "`. /etc/apache2/envvars ; echo ${APACHE_PID_FILE:-/var/run/apache2.pid}`" ]; then
/etc/init.d/apache2 reload > /dev/null
fi
fi

done

luego con un cron corro el script cada X dias

El funcionamiento es el siguiente. Reviso el directorio /var/www buscando los directorios que existen ahi (recordemos que un directorio es un sitio.tld) luego compruebo que exista el archivo de configuracion para ese dominio, de ser así ejecuto el awstats y luego realizo el savelog y reinicio el apache para que cree el nuevo log.

Soy un n00b en bash, se que el script se puede optimizar, espero sus mejoras :)