- 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 del mes August, 2009
Cargando...
Tras un problemilla con el MySQL en mi máquina que no permitía conexiones, conseguí localizar en una web el problema, una directiva que viene por defecto que limita el uso a localhost.
bind-address = 127.0.0.1Hay que cambiarla por esta otra:
bind-address = 0.0.0.0Ahora ya podremos probar la conectividad, haciendo un telnet:
# telnet ip_máquina_mysql 3306Teclado en pantalla
En primer lugar quiero agradecer la posibilidad de escribir este nuevo post a Francisco Ayllón,
que sin su comentario en el post teclado-en-pantalla-google no habría sido posible.
Lo que nuestro amigo Francisco nos envió se trata de un teclado javascript que pesa muy poco y es muy fácil de implementar
en nuestros desarrollos web.
Tener un teclado de estas características, es algo muy interesante, porque estaremos dando la posibilidad de trabajar
con nuestras aplicaciones a muchas más personas que quizás no pueden escribir en un teclado convencional.
El modo de introducir este desarrollo en nuestras aplicaciones es tan sencillo como agregar la librería javascript y la hoja
de estilo css necesarias para hacerlo funcionar y darle su apariencia.
En el ejemplo podrán verlo mucho más claro.
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.
Este post va dirigido a todos los que piensan que OpenOffice está a años luz de la suite ofimática de Microsoft Office; les interesará saber que los implicados en el proyecto, están dándole un vuelco al interfaz visual de la herramienta, para que se adapte a los nuevos tiepos y que se parezca a su competidor MS Office.
En esta dirección, podremos encontrar unas capturas de pantalla, de lo que se espera seá, la nueva apariencia. Personalmente creo que es la misma que ofrece MS Office, y también es cierto que los que estamos acostumbrados a trabajar con OpenOffice, nos parece que va “lento” en comparación con MS Office. Aunque no podemos pedir que haga milagros, si nos lo ofrecen de forma gratuita.
Os dejo una de las imágenes, para que os pique un poco la curiosidad.
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
Distribuciones como Debian, Red Hat (Cent OS), son sistemas estables, esta estabilidad hace que se orienten al mercado de servidores, del tipo que sea, como bien sabemos no hay limitación. Para el control de los servicios que estos sistemas ofrecen se han desarrollado herramientas muy útiles para que el manejo sea lo más sencillo posible. Este es el caso de programas como chkconfig, update-rc.d y service.
El programa service llama o ejecuta los scripts de /etc/init.d pasados como primer parámetro y la acción como segundo parámetro. Ejemplo:
# service apache stop
Para el servidor WEB Apache
# service apache startInvoca el servidor WEB Apache para su inicio
# service apache restartPara completamente el servidor WEB Apache, para posteriormente volver a arrancar.
# service apache reloadRecarga la configuración del servidor WEB Apache, sin necesidad de apagarlo previamente
# service –status-allNos indica el estatus de todos los servicios disponibles
Los programas chkconfig y update-rc.d nos permiten controlar la ejecución de servicios entre reinicios del equipo. Es decir, son los responsables de administrar dentro de la carpeta /etc/rcx.d si un guión se ejecuta (S), o se apaga (K) en determinado nivel de ejecución:
# chkconfig httpd offIndica que el servicio apache no estará disponible para ningún nivel de ejecución.
# chkconfig httpd onIndica que el servidor web estará disponible para todos los niveles de ejecución especificados para dicho servicio
# chkconfig –level 35 squid onIndica que el servidor proxy squid estará disponible únicamente para los niveles de ejecución 3 y 5
# chkconfig –listLista todos los servicios configurados, así como su estado predeterminado en cada nivel de ejecución
Inserta los enlaces por defecto:
# update-rc.d httpd defaultsExpecifica directamente los argumentos de inicio y parada:
# update-rc.d foobar start 20 2 3 4 5 . stop 20 0 1 6 .Elimina los enlaces, para que el servicio no se arranque:
# update-rc.d -f httpd removeLos sistemas operativos unix / linux, usan el programa init como encargado de gestionar los niveles de ejecución en los que un programa queremos que trabaje. Probablemente en el arranque de nuestros sistemas, habremos observado que lo primero que se carga es el Init, siendo este el primer proceso en ejecutarse, tras la carga del Kernel. Implementa dos sistemas de inicio: System V, o BSD-Like. Estos sistemas de inicio indican los scripts de arranque para inicializar los diferentes servicios, programas o registros que sean necesarios para que el sistema funcione, como el usuario quiera o como el administrador estableciera.
En los sistemas Unix / Linux se especifican un total de hasta 7 niveles de ejecución (conocidos también como runlevels). En la gran mayoría de distribuciones, la especificación de los niveles de ejecución son del siguiente modo:
* Nivel de ejecución 0:
o Halt. Este nivel de ejecución se encarga de detener todos los procesos activos en el sistema, enviando a la placa base una interrupción para el apagado completo del equipo.
* Nivel de ejecución 1:
o Single. Nivel de ejecución monousuario, sin acceso a servicios de red. Este nivel es normalmente usado en tareas de mantenimiento del sistema, y el usuario que lo ejecuta es root.
* Nivel de ejecución 2:
o Al igual que el nivel de ejecución monousuario, pero con funciones de red y compartición de datos mediante nfs.
* Nivel de ejecución 3:
o Sistema multiusuario, con capacidades plenas de red, sin entorno gráfico. Este nivel de ejecución es el recomendado para sistemas de servidor, ya que evita la carga innecesaria de aplicaciones consumidoras de recursos (entornos gráficos).
* Nivel de ejecución 4:
o Normalmente no es usado.
* Nivel de ejecución 5:
o Es el mismo que el nivel de ejecución 3, pero con capacidades gráficas. Ideal para entornos de escritorio.
* Nivel de ejecución 6:
o Reboot. Este nivel de ejecución se encarga de detener todos los procesos activos en el sistema, enviando a la placa base una interrupción para el reinicio del equipo.
Los scripts encargados de las llamadas, específicos de cada nivel de ejecución se encuentran almacenados en las carpetas /etc/rc{0..6}.d/, siendo únicamente enlaces simbólicos hacia los scripts de las distintas aplicaciones.
Es decir, cuando elegimos acceder a nuestro sistema en cierto nivel de ejecución (por ejemplo, 3), los scripts init que se ejecutarán son los que se encuentren en la carpeta /etc/rc3.d/. El nombre del guión de ejecución se compone básicamente de tres elementos: si el nombre del guión comienza con una letra ‘K’, se está especificando que para ese nivel de ejecución específico el guión dará de baja (matar, o kill) los procesos iniciados por dicho guión. Por el contrario, si el nombre del guión comienza por la letra ‘S’ dicho guión iniciará (start) dicha tarea. Además, estos guiones se ejecutan en orden alfabético, por lo que hay que determinar cual es el orden de ejecución mediante la inclusión de un número de dos dígitos después de la primera letra del nombre del guión. El tercer elemento del nombre del guión especifica en si mismo el nombre del servicio o tarea con la cual se va a trabajar. Ejemplo:
[mfernandez@paquito Desktop]# cd /etc/rc.d/
[mfernandez@paquito rc.d]# ls
init.d rc rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d rc.local rc.sysinit
[mfernandez@paquito rc.d]# cd rc3.d/[root@mfernandez rc3.d]# ll
total 276
lrwxrwxrwx 1 root root 17 Apr 1 17:53 K01dnsmasq -> ../init.d/dnsmasq
lrwxrwxrwx 1 root root 24 Apr 1 17:56 K02avahi-dnsconfd -> ../init.d/avahi-dnsconfd
lrwxrwxrwx 1 root root 24 Apr 1 17:57 K02NetworkManager -> ../init.d/NetworkManager
lrwxrwxrwx 1 root root 17 Apr 1 17:53 S13portmap -> ../init.d/portmap
lrwxrwxrwx 1 root root 17 Apr 1 17:54 S14nfslock -> ../init.d/nfslock
Los scripts de arranque de cada uno de los servicios, se colocarán generalmente en /etc/init.d, y mediante el programa chkconfig en RedHat o update-rc.d en sistemas debian y derivados, nos introducirá de forma automática el script en el nivel de ejecución indicado en este script. Al igual que introduce estos scripts en los diferentes niveles, también los eliminan, siendo de mucha ayuda, por el tiempo que nos ahorran.
Para establecer estos niveles directamente sobre el script, deberemos usar una cabecera en él, ejemplo:
#!/bin/sh
#
# iptables Start iptables firewall
#
# chkconfig: 2345 08 92
# description: Starts, stops and saves iptables firewall
Como podemos ver en el ejemplo, el nivel de ejecución en el que serán insertados es el 2, 3, 4, 5 y el comienzo de el script S (start) será S08, uno de los primeros. Y el de finalización K (kill) será K92, uno de los últimos.
En el directorio /etc/init.d podemos encontrar un archivo llamado skeleton, que será muy útil si queremos contruir nuestros propios scripts para aplicaciones que hayamos desarrollado, aplicaciones de terceros que necesitamos que estén como servicios, etcétera.