postgresql en mantenimiento

Servicio Postgresql en mantenimiento en Solaris 10

De pronto el servidor de reportes de Pentaho versión 5.4 dejó de funcionar, la aplicación no era cargada por Tomcat y su archivo log mostraba lo siguiente:

SEVERE: The web application [/pentaho] created a ThreadLocal with key of type [java.lang.InheritableThreadLocal] (value [java.lang.InheritableThreadLocal@4bace654]) and a value of type [org.springframework.security.providers.UsernamePasswordAuthenticationToken] (value [org.springframework.security.providers.UsernamePasswordAuthenticationToken@fc3ceceb: Principal: org.springframework.security.userdetails.User@0: Username: admin; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: Admin; Password: [PROTECTED]; Authenticated: true; Details: null; Granted Authorities: Admin]) but failed to remove it when the web application was stopped. This is very likely to create a memory leak.

Al parecer la base de datos Postgresql no estaba funcionando. Al ejecutar el comando siguiente con privilegios de root
svcs postgresql
para saber el estado del servicio regresaba lo siguiente:
bash-3.2# svcs -p postgresql
STATE STIME FMRI
disabled Sep_26 svc:/application/database/postgresql:version_81
disabled Sep_26 svc:/application/database/postgresql:version_82
disabled Sep_26 svc:/application/database/postgresql:version_82_64bit
maintenance Dec_04 svc:/application/database/postgresql:version_94

La versión 9.4 de Postgresql estaba en estado de mantenimiento (maintenance), al parecer, debido a un corte de energía, la base de datos no se apagó por completo.

Se revisa por qué motivo el servicio quedó en mantenimiento ejecutando:

bash-3.2# svcs -x postgresql
svc:/application/database/postgresql:version_94 (PostgreSQL RDBMS)
State: maintenance since Fri Dec 04 16:52:05 2020
Reason: Method failed.
See: http://sun.com/msg/SMF-8000-8Q
See: postgres_94(5)
See: /var/svc/log/application-database-postgresql:version_94.log
Impact: This service is not running.

Revisamos el archivo log que indica el el comando anterior y la última línea mostraba lo siguiente:

[ Dec 4 16:51:04 Executing stop method (“/lib/svc/method/postgresql stop”) ]
waiting for server to shut down………………………………………………………[ Dec 4 16:52:05 Method or service exit timed out. Killing contract 1187 ]

Al parecer no se completo correctamente el apagado de la Base de Datos.

Así que se revisó si algún proceso del servicio aún había quedado corriendo con el comando:

bash-3.2# svcs -p postgresql
STATE STIME FMRI
disabled Sep_26 svc:/application/database/postgresql:version_81
disabled Sep_26 svc:/application/database/postgresql:version_82
disabled Sep_26 svc:/application/database/postgresql:version_82_64bit
maintenance Dec_04 svc:/application/database/postgresql:version_94

Lo que mostró que no había otros procesos del servicio postgresql 9.4 corriendo. Si los hubiera habido, hubiera sido necesarios “matarlos” con el comando kill.

Y por último, para activar o poner nuevamente en línea el servicio de Postgresql se corre el comando:

bash-3.2# svcadm clear svc:/application/database/postgresql:version_94

Corremos nuevamente el comando svcs para verificar que el servicio está corriendo de nuevo:

-bash-3.2$ svcs postgresql
STATE STIME FMRI
disabled Sep_26 svc:/application/database/postgresql:version_81
disabled Sep_26 svc:/application/database/postgresql:version_82
disabled Sep_26 svc:/application/database/postgresql:version_82_64bit
online 18:16:25 svc:/application/database/postgresql:version_94

Efectivamente, el servicio está de nuevo en línea. Iniciamos nuestro servidor de reportes de Pentaho y listo, el error se fue.

¡Espero y les sirva! ¡Hasta la próxima!

El servidor de reportes biserver-ce de Pantaho no muestra los reportes en Solaris 10

Recién migré el servidor de reportes biserver-ce version 5.4 de Pentaho de Windows a Solaris 10 sin ningún problema aparente. Sin embargo al ejecutar los reportes, estos no se mostraban. El problema era el despliegue del reporte. Examinando el archivo log de la aplicación me encontré con el siguiente error:


java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment

La solución fue editar el archivo start-pentaho.sh y agregar la opción –Djava.awt.headless=true a la línea donde se define la variable CATALINA_OPTS. En mi caso la línea quedó así:

CATALINA_OPTS="-d64 -Xms1024m -Xmx2048m -XX:MaxPermSize=256m -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Djava.awt.headless=true"

Una vez hecho esto, reinicie el servidor de reportes y los reportes se mostraron correctamente.

¡Saludos!

Cómo dividir o partir archivos de texto en Solaris 10

A veces es necesario partir o dividir un archivo de texto con miles o millones de líneas en Solaris 10, ya sea para enviarlo por correo o por cualquier otro uso que requiera esta acción.

En este sistema operativo existe el comando split que cumple con esta función. El comando no sólo parte archivos de texto, puede también partir archivos binarios, pero a nosotros nos interesa en este artículo sólo dividir archivos de texto en piezas de un número determinado de líneas.

Para lograr esto se emplearía la siguiente forma más simple:

split -l número_de_lineas nombre_archivo_a_dividir

Por ejemplo, si queremos dividir un archivo llamado ejemplo.txt con 8500 lineas, en archivos de 1000 lineas como máximo, se ejecutaría el comando split de la siguiente forma:

split -l 1000 ejemplo.txt

Esto generará 8 archivos de 1000 lineas cada uno y uno más con 500. El comando por omisión nombra a los archivos generados anteponiéndoles el prefijo “x” y los sufijos “aa”, “ab”, “ac” y así sucesivamente. En nuestro ejemplo veremos que los archivos generados se nombraron xaa, xab, xac, xad, xae, xaf, xag, xah y xai.

Si queremos incluir un prefijo determinado a los archivos generados, utilizaríamos la forma siguiente del comando:

split -l número_de_lineas nombre_archivo_a_dividir nombre_prefijo_archivos

Por lo tanto, si queremos que a los archivos les anteceda el nombre “dividido” el comando a ejecutar sería:

split -l 1000 ejemplo.txt dividido

Esto nombraría a los archivos de salida divididoaa, divididoab, divididoac … y así sucesivamente.

Espero y les sea útil. ¡No olviden visitar a los patrocinadores para que este blog siga existiendo!