- Alfresco (5)
- bbdd (4)
- Chisteradas (6)
- Curiosidades (16)
- General (83)
- Java (5)
- JavaScript (1)
- JBoss (4)
- Linux (37)
- MacOS X (4)
- Monitorización (2)
- PHP (4)
- Sobre el autor (2)
- Sobre el autor (8)
- SysAdmin (45)
- Uncategorized (23)
- vmware (1)
- Webmaster (12)
Entradas de la categoría ‘SysAdmin’
Cargando...
Error: Exception thrown by the agent : java.rmi.server.ExportException:Port already in use: 8999; nested exception is:java.net.BindException: Address already in useLa 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.
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 .shtmlAddHandler server-parsed .shtml
Y a la directiva
"Options"añadiremos también la partícula+IncludesHagámoslo para Tomcat
Renombrar $CATALINA_BASE/server/lib/servlets-ssi.renametojar a
$CATALINA_BASE/server/lib/servlets-ssi.jarDescomentar 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
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 !
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 mfernandezHecho, 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 -lssh -p 55555 localhost -l mfernandez
Estos mismos principios podemos aplicárselos a cualquier puerto que queramos redireccionar a nuestra máquina.
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.sqlSe 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 postgrespostgres@paquito:/home/mfernandez$ psql -lObtenemos algo como esto:
Listado de base de datosNombre | 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.sqlHacer una copia e insertarla en otra máquina
mfernandez@paquito:~$ pg_dump mybbdd | psql -h acerito mybbddRestaurar todas las bases de datos (con el usuario postgres)
mfernandez@paquito:~$ su postgrespostgres@paquito:/home/mfernandez$ psql -ffullbackup20100110.sqlRestaurar una tabla en una base de datos
postgres@paquito:/home/mfernandez$ psql -fbackuptprueba20100110.sqlmybbddEn 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.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.
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
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.shVer 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:
* * * * * CMDEl * 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.shEsto 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.shProgramació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.shProgramació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.shCó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.shSi 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.
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