Cargando...
Entradas de la categoría ‘SysAdmin’
  1. Error: Exception thrown by the agent : java.rmi.server.ExportException:
    Port already in use: 8999; nested exception is:
    java.net.BindException: Address already in use

    La causa del error de puerto ya en uso, sobre versiones antiguas de Tomcat, que no nos permite parar el servidor de aplicaciones, se soluciona de forma sencilla editando el fichero catalina.sh (sobre el bloque (case) de “STOP”)

    Línea anterior

    • $_RUNJAVA" $JAVA_OPTS $CATALINA_OPTS \

    Línea modificada

    • $_RUNJAVA" $JAVA_OPTS \

    Hay que tener en cuenta que los modificadores para levantar el puerto, se deben establecer en CATALINA_OPTS, que no será leido.

  2. Es posible introducir en nuestras páginas WEBs distintas etiquetas que serán interpretadas del lado del servidor, y serán enviadas al usuario en forma de valor. Esto es posible hacerlo con tags, que no son más que unas etiquetas un tanto especiales.
    SSI, es el acrónimo de Server Side Includes, y creo que lo mejor será ver un ejemplo de lo que pueden hacer estas etiquetas y como hacer posible su interpretación por parte del servidor.

    En Httpd

    Etiquetas:
    Dirección IP del servidor: <!--#echo var="SERVER_ADDR"-->

    Cómo activarlas:
    Agregaremos en el bloque que hace referencia al directorio en el que queremos que estén disponibles los archivos .shtml

    AddType text/html .shtml
    AddHandler server-parsed .shtml

    Y a la directiva "Options" añadiremos también la partícula +Includes

    Hagámoslo para Tomcat

    Renombrar $CATALINA_BASE/server/lib/servlets-ssi.renametojar a $CATALINA_BASE/server/lib/servlets-ssi.jar

    Descomentar en el xml siguiente los comentarios alrededor del servlet SSI  y servlet-mapping en $CATALINA_BASE/conf/web.xml

    Más información en Apache.org

  3. Para usar Yum donde haya un proxy, deberemos modificar el fichero de configuración /etc/yum.conf

    Le agregaremos las siguientes líneas:

    proxy=http://<IP-Servidor-proxy>:<puerto>/
    proxy_username=<usuario>
    proxy_password=<clave>

    Funcionando !

  4. Tiempo atrás hace 2 años escribí una entrada que hablaba sobre como crear un túnel ssh con la aplicación Plink. A pesar de haber estado trasteando con esta aplicación, de eso hace bastante tiempo y casi no recuerdo como se trabaja con ella. Hagamos memoria de como podemos hacer un túnel ssh hacia una segunda máquina, que por ejemplo se encuentre en una red distinta a la que no tenemos acceso, por ejemplo:

    Acceder desde casa a la máquina de la oficina. Directamente no podemos acceder, porque la máquina de la oficina está en una red completamente distinta a la de casa. Por eso vamos ha realizar un salto entre la máquina firewall, para llegar a la máquina local de la oficina.

    PC DE CASA   — >   MÁQUINA INTERMEDIA   — >  MÁQUINA DE LA OFICINA  (Ejemplo)

    Paquito         — >           mfernandez.es        — >  mfernandezp                       (Mi caso)

    Copiamos el ejecutable plink.exe y lo colocamos en el directorio C:\ para seguidamente crearle un acceso directo y colocarlo donde nos apetezca. Con botón derecho visionamos las propiedades y en destino le colocamos la siguiente linea:

    ssh -L <puerto local>:<el otro equipo>:<puerto en el otro equipo><equipo que puede conectarse>

    ssh -L 55555:mfernandezp:22  mfernandez.es  -l mfernandez

    Hecho, ya tenemos transformado el puerto 22 de la máquina de la oficina en el puerto 55555 de paquito, ahora solo tenemos que hacernos un ssh a localhost -p 55555 usando el putty por ejemplo.

    ssh -p 55555 localhost -l
    ssh -p 55555 localhost -l mfernandez

    Estos mismos principios podemos aplicárselos a cualquier puerto que queramos redireccionar a nuestra máquina.

  5. Hace mucho tiempo (2 años) escribí una entrada sobre como realizar backup / restore de bases de datos MySQL y PostgreSQL muy escueta y básica (demasaido). Creo que sobre MySQL no hay mucho misterio y sí que, para todos los que nunca lo han usado o estén empezando, hay muchas dudas sobre como trabajar con PostgreSQL.

    Veamos como hacer backup y restore de bases de datos PostgreSQL con pg_dump y psql, para ello vamos a crear el usuario ‘mfernandez’ y base de datos ‘mybbdd’

    Ante todo, cuando empezamos a trabajar con un programa que no hemos usado antes, lo que debemos hacer es --help, -h, man o info (nunca como root).

    Backup de una base de datos

    mfernandez@paquito:~$ pg_dump --user=mfernandez mybbdd --file=backup20100110.sql

    Se solicitará password, tras ello se creará el archivo  backup20100110.sql con todo lo necesario para recrear lo que la base de datos tenía inicialmente.

    Backup de todas las bases de datos

    Primero veamos cuantas bases de datos tenemos con un psql -l (con el usuario postgres)

    mfernandez@paquito:~$ su postgres

    postgres@paquito:/home/mfernandez$ psql -l

    Obtenemos algo como esto:
    Listado de base de datos
    Nombre    |   Dueño    | Codificación |  Collation  |    Ctype    |      Privilegios
    ————-+————+————–+————-+————-+———————–
    alfresco203 | alfresco   | UTF8         | es_ES.UTF-8 | es_ES.UTF-8 |
    mybbdd      | mfernandez | UTF8         | es_ES.UTF-8 | es_ES.UTF-8 |
    postgres    | postgres   | UTF8         | es_ES.UTF-8 | es_ES.UTF-8 |
    template0   | postgres   | UTF8         | es_ES.UTF-8 | es_ES.UTF-8 | =c/postgres
    : postgres=CTc/postgres
    template1   | postgres   | UTF8         | es_ES.UTF-8 | es_ES.UTF-8 | =c/postgres
    : postgres=CTc/postgres
    (5 filas)


    postgres@paquito:/home/mfernandez$ pq_dumpall > fullbackup20100110.sql

    Backup de una tabla en concreto

    Primero veamos cuantas bases de

    mfernandez@paquito:~$ pg_dump –table tprueba -U mfernandez mybbdd -f backuptprueba20100110.sql

    Restaurar una base de datos

    mfernandez@paquito:~$ psql -U mfernandez -f backup20100110.sql

    Hacer una copia e insertarla en otra máquina

    mfernandez@paquito:~$ pg_dump mybbdd | psql -h acerito mybbdd

    Restaurar todas las bases de datos (con el usuario postgres)

    mfernandez@paquito:~$ su postgres

    postgres@paquito:/home/mfernandez$ psql -f fullbackup20100110.sql

    Restaurar una tabla en una base de datos

    postgres@paquito:/home/mfernandez$ psql -f backuptprueba20100110.sql mybbdd

  6. En el trabajo diario con servidores de aplicaciones, es muy típico el uso de un Front-end -parte que interactúa con el usuario- para acceder a la información.
    Veamos como configurar un servidor WEB como Front-end de un cluster de servidores de aplicaciones Tomcat.

    En cada uno de los “nodos” del cluster, deberemos editar el fichero server.xml que tenemos disponible en la ruta: $TOMCAT_HOME/conf/server.xml

    Originalmente, tenemos el siguiente código en ambos nodos:

    <!– Define an AJP 1.3 Connector on port 8009 –>

    enableLookups=”false” redirectPort=”8443″ protocol=”AJP/1.3″ />

    <!– You should set jvmRoute to support load-balancing via AJP ie :
    <Engine name=”Standalone” defaultHost=”localhost” jvmRoute=”jvm1″>
    –>

    Lo modificaremos para que quede del siguiente modo en el nodo1:
    <!-- Connector AJP en el puerto 8109 -->

    enableLookups=”false” redirectPort=”8443″ protocol=”AJP/1.3″ />

    <!– Establecemos jvmRoute para el balanceo via AJP –>

    Nodo2:
    <!-- Connector AJP en el puerto 8109 -->

    enableLookups=”false” redirectPort=”8443″ protocol=”AJP/1.3″ />

    <!– Establecemos jvmRoute para el balanceo via AJP –>

    Es recomentable cambiar los puertos en cada servidor de aplicaciones, sobre todo para que estén bien diferenciados -por nosotros y por el servidor WEB-

    Ahora deberemos crear el archivo workers.properties, para definir cada uno de los nodos, y como se balancean las peticiones y sesiones. El contenido de este archivo es el siguiente:

    worker.list=nodo1,nodo2,loadbalancer

    #nodo1

    worker.nodo1.host=172.26.0.10

    worker.nodo1.port=8109
    worker.nodo1.host=localhost
    worker.nodo1.type=ajp13
    worker.nodo1.lbfactor=1

    #nodo2

    worker.nodo2.host=172.26.0.20

    worker.nodo2.port=8209
    worker.nodo2.host=localhost
    worker.nodo2.type=ajp13
    worker.nodo2.lbfactor=1

    worker.loadbalancer.type=lb
    worker.loadbalancer.balanced_workers=nodo1,nodo2
    worker.loadbalancer.sticky_session=1

    Bastará con reiniciar el servicio httpd -service httpd restart- para que todo comience a funcionar.

  7. Configuración de Alfresco para el envío de notificaciones Email mediante Gmail.

    Agregamos al final del archivo de configuración principal “custom-repository.properties” las siguientes lineas.


    #Configuracion de correo
    mail.host=smtp.gmail.com
    mail.port=465
    mail.transport.protocol=smtp
    mail.username=manuelfernandezpanzuela@gmail.com
    mail.password=*****
    mail.smtp.auth=true
    mail.smtp.timeout=25000
    mail.smtp.starttls.enable=true
    mail.smtp.socketFactory.port=465
    mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
    mail.smtp.socketFactory.fallback=true
    mail.encoding=UTF-8
    mail.from.default=manuelfernandezpanzuela@gmail.com

    Buscaremos en el fichero core-services-context.xml el bean “mailService”, para cambiar su contenido y dejarlo como este core-services-context.xml.

  8. Haciendo unas pruebas, me encuentro con una máquina virtual (Fedora 11) que no tiene configurado el idioma del teclado al español, así que vamos a cambiarlo:

    Para poner temporamente el español: setxkbmap es

    Para que sea definitivo: system-config-keyboard

  9. El programa Cron, puede que esté dentro de las herramientas más importantes para un administrador de sistemas, cumple uno de los objetivos fundamentales, realizando tareas de forma automática. Delegar tareas es algo bastante delicado, pero podemos estar tranquilos si este programa lo controla.

    El formato que comple las entradas que recibe la aplicación, es este:


    MIN HOUR DOM MON DOW CMD
    Campos        Descripción            Valores posibles
    Min           Campo minutos          0 - 59
    HOUR          Campo hora             0 - 23 (Formato 24 horas)
    DOM           Día del mes            0 - 31
    MON           Campo mes              0 - 12
    DOW           Día de la semana       0 - 6
    CMD           Cualquier comando que necesitemos que se ejecute PE: /etc/init.d/apache2 restart

    Programación de una tarea para una hora y día concreto:
    Vamos a programar una tarea para que se ejecute el día 19 de Agosto a las 22:00 y llame al script bonito.sh


    00  22  19  08  *  /home/mfernandez/scriptsCRON/bonito.sh
    00 - minuto 0
    22 - 22 horas de la noche
    19 - Día 19 del mes indicado
    08 - Octavo mes (Agosto - ojú que caló)
    * - Todos los días de la semana
    /home/mfernandez/scriptsCRON/bonito.sh - script que se ejecutará

    Tarea para más de una ejecución (dos veces al día)
    Este script hará copias incrementales dos veces al día con cpio. El modo de trabajo es ejecutarlo a las 10:00 (hora del desayuno) y volverlo a ejecutar a las 15:00 (hora de salida), todos los días. La coma que se para los valores de horas, indicará que se ejecute el programa a las horas indicadas.


    00  10,15  *  *  *  /home/mfernandez/scriptsCRON/copiasCPIO.sh
    00 - minuto 0
    10,15 - 10 y 15 horas respectivamente
    * - Todos los días de la semana
    * - Todos los meses
    * - Todos los días de la semana
    /home/mfernandez/scriptsCRON/copiasCPIO.sh - script que se ejecutará

    Tarea que se ejecuta todos los días en un intervalor dado de horas
    Este script se ejecutará durante las horas de trabajo, entre las 8:00 y las 15:00 y almacenará en un log, los niveles de carga de la máquina y el número de sockets de la aplicación Alfresco contra la base de datos Oracle.


    00  8-15  *  *  *  /home/mfernandez/scriptsCRON/alfrescoMonitor.sh
    00 - minuto 0
    8-15 - intervalor de horas en que se ejecutará el script (8:00, 9:00, 10:00, 11:00, 12:00, 13:00, 14:00, 15:00)
    * - Todos los días de la semana
    * - Todos los meses
    * - Todos los días de la semana
    /home/mfernandez/scriptsCRON/alfrescoMonitor.sh - script que se ejecutará

    El mismo de antes pero para todos los días laborables, excluyendo el fin de semana:
    00  8-15  *  *  1-5  /home/mfernandez/scriptsCRON/alfrescoMonitor.sh

    Ver las entradas del Crontab:

    Para un usuario cualquiera del sistema:

    mfernandez@paquito$ crontab -l

    # Entradas en el cron de Mfernandez
    00  22  19  08  *  /home/mfernandez/scriptsCRON/bonito.sh
    00  10,15  *  *  *  /home/mfernandez/scriptsCRON/copiasCPIO.sh
    00  8-15  *  *  *  /home/mfernandez/scriptsCRON/alfrescoMonitor.sh

    (Este comando solo mostrará las entradas, para el usuario que lo ejecuta)
    Para el usuario root:


    root@paquito# crontab -l
    no crontab for root

    Cómo ver entradas Crontab de otros usuarios
    Para ver las entradas en el crontab de otros usuarios, podremos verlos logueando con el usuario root y usando -u {username} -l:


    root@paquito# crontab -u mfernandez -l
    00  22  19  08  *  /home/mfernandez/scriptsCRON/bonito.sh
    00  10,15  *  *  *  /home/mfernandez/scriptsCRON/copiasCPIO.sh
    00  8-15  *  *  *  /home/mfernandez/scriptsCRON/alfrescoMonitor.sh

    Cómo editar las entradas de Crontab.

    Edición de Crontab con el usuario que está logueado:
    Para edicar las entradas, usaremos crontrab -e. Por defecto, se editará el crontab del usuario que lo ejecuta.


    mfernandez@paquito$ crontab -e
    # Entradas en el cron de Mfernandez
    00  22  19  08  *  /home/mfernandez/scriptsCRON/bonito.sh
    00  10,15  *  *  *  /home/mfernandez/scriptsCRON/copiasCPIO.sh
    00  8-15  *  *  *  /home/mfernandez/scriptsCRON/alfrescoMonitor.sh

    (Dependiendo del sistema, se usará un editor u otro, para Debian, se usar Nano, y para sistemas RedHat, Vi)

    Editamos las entradas del Crontab de Root
    Logueando con el usuario root, escribiremos crontab -e

    Editar el crontab de otro usuario, requiere que lo hagamos con el usuario root, y usemos -u {username} -e.


    mfernandez@paquito# crontab -u mfernandez -e
    # Entradas en el cron de Mfernandez
    00  22  19  08  *  /home/mfernandez/scriptsCRON/bonito.sh
    00  10,15  *  *  *  /home/mfernandez/scriptsCRON/copiasCPIO.sh
    00  8-15  *  *  *  /home/mfernandez/scriptsCRON/alfrescoMonitor.sh

    Estos son algunos conceptos esenciales y muy usados:

    * * * * * CMD
    El * significa todas las posibilidades, en este caso sería: Todos los minutos, de todas las horas, durante todo el año. Más usos del * a continuación.

    Cuando expecificamos */5 en el campo minutos, significa cada 5 minutos.
    Cuando expecificamos 0-10/2 en el campo minuto, significa cada 2 minutos en los primeros 10 minutos.
    Así, el convenio anterior, puede ser aplicado a los otros 4 campos.

    Programación de una tarea para ejecutarla cada 10 minutos

    */10 * * * * /home/mfernandez/scriptsCRON/alfrescoMonitor.sh
    Esto ejecuta el scritp expecificado, cada diez minutos, todos los días a todas horas a lo largo del año.

    También existe la posibilidad que permite especificar los valores en los 5 campos de otro modo, se puede hacer usando una sola palabra clave que, comentamos a continuación:

    Hay casos especiales en los que en lugar de los campos por encima de los 5, se puede usar @ seguida de una palabra clave - tales como reiniciar el sistema, a medianoche, cada año, cada hora.

    Tabla: Palabras especiales del Cron y su significado

    Palabra clave     Equivalencia
    @yearly           0 0 1 1 *
    @daily            0 0 * * *
    @hourly           0 * * * *
    @reboot           Run at startup

    Programación de una tarea para el primer minuto de cada año con @yearly

    Si queremos que una tarea se ejecute el primer minuto de cada año, entonces podrá usarse la palabra clave @yearly.
    Que ejecutará una tarea anual de mantenimiento, a las 00:00 de Enero de cada año.

    @yearly /home/mfernandez/scriptsCRON/mantenimiento-anual.sh

    Programación de una tarea para el primer minuto de cada mes con con @monthly
    Esta es la misma que la anterior, pero usando @monthly, la cual se ejecutará cada primero de mes, a las 00:00.

    @monthly /home/mfernandez/scriptsCRON/mantenimiento-mensual.sh

    Programación de una tarea para el primer minuto de cada día con con @daily
    Es como los anteriores, pero en este ejecutaremos un mantenimiento diario cada día a las 00:00.

    @daily /home/mfernandez/scriptsCRON/mantenimiento-diario.sh "Comienza el dia"

    Programación de una tarea para ser ejecutada justo después de cada reinicio usando @reboot

    @reboot /home/mfernandez/scriptsCRON/al-arrancar.sh

    Cómo deshabilitar / redirigir la salida de correo de crontab usando la palabra clave MAIL

    Crontab por defecto envía el trabajo de salida al usuario que lo programó. Si queremos redirigir la salida a un usuario específico, añadiremos o actualizaremos la variable MAIL como se muestra a continuación.

    mfernandez@paquito$ crontab -lMAIL="mfernandez"

    @yearly /home/mfernandez/scriptsCRON/mantenimiento-anual.sh

    Si deseamos que el email no sea enviado a ninguna parte, bastará con actualizar el mail en el crontab.


    */10 * * * * /home/mfernandez/scriptsCRON/mantenimiento-diario.sh
    MAIL=”"

    Ejecución de tareas cada segundo en Crontab.

    No hay parámetros para programar tareas cada segundo, siendo la unidad mínima los minutos. En un escenario típico, no hay razón para ejecutar tareas cada segundo en el sistema, sobre todo porque sería perjudicial, ya que estaría cargando la máquina demasiado.

    Expecificar variables PATH en Crontab

    Todos los ejemplos que hemos puesto hasta ahora llevan la ruta completa hasta el script que vamos a ejecutar. Por ejemplo, en vez de /home/mfernandez/scriptsCRON/mantenimiento-anual.sh, podemos expecificar solo mantenimiento-diario.sh, pero para ello deberemos declarar una variable en crontab, que lleve hasta el.


    mfernandez@paquito$ crontab -l
    PATH=/bin:/sbin:/usr/bin:/usr/sbin:/home/mfernandez/scriptsCRON
    @yearly mantenimiento-anual */10 * * * * alfrescoMonitor.sh

    Insertar un crontab desde un archivo de cron

    En vez de tener que editar directamente crontab, podemos agregar las lineas a un archivo de cron. Una vez tenemos este archivo con las entradas correspondientes, podemos agregarlos al crontab

    mfernandez@paquito$ crontab -lno crontab for mfernandez
    mfernandez@paquito$ cat entradas-cron.txt
    @yearly /home/mfernandez/scriptsCRON/mantenimiento-anual.sh
    */10 * * * * /home/mfernandez/scriptsCRON/alfrescoMonitor.sh


    mfernandez@paquito$ crontab entradas-cron.txt
    mfernandez@paquito$ crontab -l
    @yearly /home/mfernandez/scriptsCRON/mantenimiento-anual.sh
    */10 * * * * /home/mfernandez/scriptsCRON/alfrescoMonitor.sh

    Mucho cuidado al crear entradas en el cron desde un fichero, porque las entradas anteriores, se eliminarán para cargar las nuevas, y puede que perdamos información.

  10. Todos conocemos bien el history de nuestra máquina, pero muchas veces, vemos que se queda un poco corto a la hora de mostrarnos información, sobre todo cuando queremos saber cuando se ejecutó un comando, y la hora. Es interesante sobre todo, cuando el sistema se gestiona por varias personas y no se usa sudo.

    Editando el fichero /etc/bashrc y agregando al final la linea:
    export HISTTIMEFORMAT='%h/%d - %H:%M:%S '
    Cerramos y abrimos de nuevo la sesión para que los cambios surtan efecto, y lo que antes era una fea lista:

    118 cat /etc/bashrc
    119 ps aux
    120 sudo -s

    Ahora es un historial de verdad:


    126  Aug/18 - 19:50:43 vim /etc/bashrc
    127  Aug/18 - 19:50:50 sudo -s
    128  Aug/18 - 19:51:13 exit
    129  Aug/18 - 19:51:58 history

Creado con la plantilla ExtJS traducida por Ayuda Wordpress.