miércoles, 30 de octubre de 2013

HOW TO: CREAR Y CONFIGURAR SCRIPT (START, STOP, RESTART) EN DEBIAN 6 PARA QUE SE EJECUTE AL INICIAR EL SISTEMA OPERATIVO.

Con estos breves pasos, configuraremos un script que ejecute las acciones de start, stop y restart del servicio y se ejecute al iniciar el sistema operativo:

1. Crear el script:
Según sea lo que necesiten, creen y prueben el shell script que desean que se ejecute al inicio del sistema operativo.
Acá dejo un ejemplo de un script para iniciar tomcat6. Mi instalación default para este ejemplo fue /var/lib/tomcat6 y con el Java 6 Runtime Enviroment en /var/lib/java/jdk1.6.0_05/.  Este script permitirá tanto como iniciar, detener y reiniciar el servicio de tomcat6 y también permitirá ejecutarlo cuando se inicie el servidor.
#!/bin/bash
### BEGIN INIT INFO
# Provides:          tomcat
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remore_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Script para iniciar tomcat al inicio del servidor
# Description:       framirez.ve@gmail.com - 25-NOV-2013
### END INIT INFO
export JRE_HOME=/var/lib/java/jdk1.6.0_05/jre/
        case $1 in
        start)
                sh /var/lib/tomcat6/bin/startup.sh start
                ;;
        stop)
                sh /var/lib/tomcat6/bin/shutdown.sh stop
                ;;

        restart)
                sh /opt/tomcat/bin/catalina.sh stop
                sh /var/lib/tomcat6/bin/shutdown.sh start
                ;;
        esac
        exit 0


2. Copiar el script a la ruta /etc/init.d/.  Dar privilegios de ejecución al script (por ejem: chmod +x /etc/init.d/tomcat).

Explicación del script:
Si se fijan el el encabezado del script, abajo de la 1ra linea #!/bin/bash observarán algunas lineas:
### BEGIN INIT INFO
# Provides:          tomcat
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remore_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Script para iniciar tomcat al inicio del servidor
# Description:       framirez.ve@gmail.com - 25-NOV-2013
### END INIT INFO

Esto se refiere a la funcionalidad de Linux Standard Base (LSB) o Linux Standard a través de sus LBS Tags:

"El objetivo de la LSB es desarrollar y promover un conjunto de estándares que aumentarán la compatibilidad entre las distribuciones de Linux y permitirán que los programas de aplicación puedan ser ejecutados en cualquier sistema que se adhiera a ella. Además, la LSB ayudará a coordinar esfuerzos tendentes a reclutar productores y proveedores de programas que creen productos originales para Linux o adaptaciones de productos existentes."  

En resumen: Si no quieres utilizar los "LSB Tags" en tu script, deberás desinstalar el paquete insserv (apr-get remove insserv) y el script quedaría como el que sigue:
#!/bin/bash
export JRE_HOME=/var/lib/java/jdk1.6.0_05/jre/
        case $1 in
        start)
                sh /var/lib/tomcat6/bin/startup.sh start
                ;;
        stop)
                sh /var/lib/tomcat6/bin/shutdown.sh stop
                ;;

        restart)
                sh /opt/tomcat/bin/catalina.sh stop
                sh /var/lib/tomcat6/bin/shutdown.sh start
                ;;
        esac
        exit 0

NOTA IMPORTANTE: Si desinstalas la funcionalidad de LSB Tags es muy probable que los scripts que ya tengas creados y funcionando de esta manera, en tu Sistema Operativo, dejen de funcionar.

3. Ejecutar el comando:
update-rc.d tomcat defaults 80

Este comando creará los enlaces correspondientes automatizando el proceso de creación y borrado de enlaces a los scripts de inicio, con en fin de iniciar/parar servicios.

La sentencia "defaults" indica que el script arrancará y se detendrá en los niveles por defecto.

La sentencia "80" indica la prioridad de inicio y parada del script.

4. Para finalizar, validamos la creación del script por medio de enlaces simbólicos (por ejemplo, ls -l /etc/rc2.d/):

ls -l /etc/rc2.d/
total 4
-rw-r--r-- 1 root root 677 mar 26  2012 README
lrwxrwxrwx 1 root root  31 oct 21 08:52 S01xe-linux-distribution -> ../init.d/xe-linux-distribution
lrwxrwxrwx 1 root root  17 oct 18 17:52 S14portmap -> ../init.d/portmap
lrwxrwxrwx 1 root root  20 oct 18 17:52 S15nfs-common -> ../init.d/nfs-common
lrwxrwxrwx 1 root root  17 oct 18 17:52 S17rsyslog -> ../init.d/rsyslog
lrwxrwxrwx 1 root root  14 oct 24 09:14 S17sudo -> ../init.d/sudo
lrwxrwxrwx 1 root root  17 oct 24 09:30 S18apache2 -> ../init.d/apache2
lrwxrwxrwx 1 root root  15 oct 24 09:30 S19acpid -> ../init.d/acpid
lrwxrwxrwx 1 root root  13 oct 24 09:30 S19atd -> ../init.d/atd
lrwxrwxrwx 1 root root  14 oct 24 09:30 S19cron -> ../init.d/cron
lrwxrwxrwx 1 root root  15 oct 24 09:30 S19mysql -> ../init.d/mysql
lrwxrwxrwx 1 root root  13 oct 24 09:30 S19ssh -> ../init.d/ssh
lrwxrwxrwx 1 root root  16 oct 25 11:26 S19tomcat -> ../init.d/tomcat

5. Para probar, reiniciamos el servidor y validamos que el servicio se haya iniciado en forma correcta (por ejemplo ps aux | grep tomcat):

ps aux | grep tomcat
root      1039  0.0  2.0 677068 41940 ?        Sl   Oct25   3:11 /var/lib/java/jdk1.6.0_05/jre//bin/java -Djava.util.logging.config.file=/var/lib/tomcat6/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/var/lib/tomcat6/endorsed -classpath /var/lib/tomcat6/bin/bootstrap.jar -Dcatalina.base=/var/lib/tomcat6 -Dcatalina.home=/var/lib/tomcat6 -Djava.io.tmpdir=/var/lib/tomcat6/temp org.apache.catalina.startup.Bootstrap start start
root      9797  0.0  0.0   3320   804 pts/0    S+   11:12   0:00 grep tomcat


viernes, 25 de octubre de 2013

HOW TO: CERRAR EN FORMA REMOTA SESIONES DE TERMINAL SERVER - RDP (MICROSOFT)

Quién no ha intentado ingresar en forma remota, vía escritorio remoto a un equipo y no ha podido debido a que han dejado sesiones abiertas en el equipo remoto y no permite una nueva conexión?.


Lo que hacíamos en ese momento era llamar a la persona que "posiblemente" estuvo conectado al servidor (y que dejó la sesión abierta o sencillamente no hizo logoff en forma debida, típico, cierran la aplicación por el botón "X" de cerrar y dejan la sesión aún conectada) para que liberarán una conexión remota.  Puede ocurrir también que las sesiones estén "up" y nadie sepa quien las tiene, o bien se hayan quedado colgadas por algún problema con el cliente de terminal.

Ya tenemos solución a esto, vía remota podemos desconectar sesiones para que podamos ingresar nosotros vía rdp, al equipo remoto:

1. Con un equipo con Windows Server 2003, vamos a Inicio --> Ejecutar y colocamos en la ventana \\IP-Servidor (Por ejemplo, \\192.168.49.5 que es el equipo "ejemplo" al cual quiero llevar vía terminal server pero no puedo) y presionamos "Aceptar":


2. Si nos pide las credenciales para conectarnos, pues se la colocamos:


3. De esta manera, al aparecer la ventana con las carpetas compartidas del servidor remoto al cual nos acabamos de conectar, ya tenemos una sesión "temporal" (si no guardamos la contraseña, por ejemplo) con ese equipo. Ahora, podemos cerrar esta ventana:


4. Desde mi equipo local, vamos a Inicio --> Ejecutar y colocamos en la ventana el comando cmd, aquí colocaremos lo que sigue:

query session /server:IP-Servidor
(Por ejemplo, query session /server:192.168.49.5)


5. Como verán en la imagen anterior, podemos identificar las sesiones remotas con el nombre de "rdp-tcp#....". Ejecutaremos ahora el comando:
reset session ID# /server:IP-Servidor, donde ID# es el número de ID del proceso rdp-tcp e IP-Servidor es la dirección IP del servidor remoto:


(Por ejemplo, reset session 1 /server:192.168.49.5)


6. Para finalizar, probamos nuevamente la conexión al equipo remoto vía escritorio remoto o algún otro cliente (en mi caso, utilizo El cliente de escritorio remoto en GTK+ Remmina sobre GNU/Linux Ubuntu 12.04 LTS).  Ya podemos conectarnos al equipo!!!.


NOTA: Para cerrar sesiones remotamente desde Windows XP, los comandos que debemos ejecutar (todo lo demás queda igual) serían los siguientes:

qwinsta /server:IP-Servidor
(Por ejemplo, qwinsta /server:192.168.49.5 Para ver las sesiones)

y

rwinsta /server:IP-Servidor ID#, donde  IP-Servidor es la dirección IP del servidor remoto y ID# es el número de ID del proceso rdp-tcp:

(Por ejemplo, rwinsta /server:192.168.49.5 3 para "matar" la sesión ID 3):