Ejecutar tareas de fondo en linux

Debido a la configuración que tengo en casa, utilizo bastante conexiones ssh a mi servidor para diferentes tareas. Uno de mis discos duros ha pasado a mejor vida, y he tenido que reorganizar ciertos archivos, en total 1Tb más o menos, lo cual es bastante tedioso.

Para ello, lo más rapido, como he dicho, es una conexión a traves de ssh al servidor, y hacer desde allí los movimientos necesarios, ya que mis NAS tienen conexión por cable al mismo switch que el servidor, en vez de la conexión wireless que usa mi equipo habitual.

El caso es que mover un cierto volumen de archivos lleva bastante tiempo, y claro, no siempre puedo mantener la conexion ssh abierta indefinidamente.

 

Utilizando &

Lo primero que intenté fue utilizar el terminador & para ejecutar mi cp de fondo.

cp /nas1/archivos /nas2 &

La tarea se lanza en el background, sin ningun problema, y puedo seguir trabajando con el terminal. El problema viene si intentamos cerrar la conexión ssh, todas las tareas activas se terminan, incluso si están corriendo de fondo. Así que esta solución no me servía al 100%.

Utilizando nohup

Mi segundo intento fue con nohup. Si lanzamos el comando con nohup, lo que hacemos es que la tarea permanezca activa incluso despues de cerrar el terminal, ya que no recibe la señal HUP que se envía a todas las tareas al cerrar este.

nohup cp /nas1/archivos /nas2

Cualquier mensaje generado por el comando es redireccionado al fichero nohup.out. A pesar de que esto parecía funcionar bien, por alguna razon no podía lanzar dos comandos simultaneos con nohup. El primero siempre se detenía al comenzar el segundo. No se si hay alguna forma de evitar esto, ya que antes de investigar a fondo, encontré la tercera y definitiva opción.

Screen

Hay un programa llamado screen, que en el caso de ubuntu podeis instalar con

sudo aptitude install screen

Para lanzar nuestro comando lo hacemos de la siguiente manera

screen cp /nas1/archivos /nas2

Una vez lanzado el comando, “salimos” de screen pulsando Ctrl+A y luego D.

Nuestro proceso seguira activo en una instancia de screen, y nosotros somos libres de utilizar el terminal como queramos, incluso de cerrarlo sin ningun problema.

Podemos cerrar la conexión ssh, y el proceso seguirá activo. Podemos reconectar por ssh, y utilizando screen -r, volver a la instancia de screen que queramos para comprobar como sigue nuestro proceso.

Por supuesto, podemos lanzar varias instancias de screen con diferentes comandos al mismo tiempo, y volver a cada una de ellas si queremos.

En fin, una estupenda utilidad que me ha ahorrado mucho tiempo de espera.

Problema con fuentes en Wine

Desde hace una temporada, creo que desde que actualicé a Intrepid, tengo problemas con las fuentes en Wine. Es difícil de describir, así que lo mejor es una imagen.

http://koti.kapsi.fi/anpurola/winecfg.png

Para solucionarlo, al menos en mi caso, he tenido que hacer lo siguiente.

Crear un nuevo fichero

nano fichero.txt

con el texto siguiente

[HKEY_CURRENT_USER\Software\Wine\X11 Driver]
"ClientSideWithRender"="N"

F2, S, Enter para salir y guardar.
Después ejecutamos

regedit fichero.txt

para importar la clave en el registro de Wine, y listo.

En mi equipo ha funcionado a la perfección, y ya puedo ver correctamente mi ventana de μTorrent, que es básicamente para lo único que utilizo wine.

Instalar Subsonic en Ubuntu 8.04 Server

Voy a tratar de explicar cómo instalar Subsonic en un servidor web con Apache2, algo con lo que me he estado pegando un buen rato.

Subsonic es un media server a través de web, que te permitirá acceder a toda tu música desde cualquier sitio en que te encuentres. Puedes usarlo para compartir música con tus amigos, escuchar tus canciones desde el trabajo, etc. Permite accesos simultáneos desde varios lugares.

En principio creo que funciona con audio y vídeo. Incluso se pueden instalar plugins para convertir audio desde formatos poco comunes “on-the-fly”.

Por supuesto necesitas un servidor visible desde internet, si quieres acceder a él desde fuera de tu red local.

La aplicación está gestionada por un servlet java llamado Tomcat. Dicho servlet puede funcionar de forma autónoma (sin Apache) o se pueden gestionar las peticiones a través de nuestro servidor web apache.

En el primer caso la configuración es más sencilla (ver el tutorial en Only Ubuntu Linux), aunque también tiene algunas desventajas. En mi caso la principal es que el acceso a Tomcat se hace a través del puerto 8180, lo que me dificulta (más bien imposibilita) el acceso desde la red corporativa de mi empresa.

Al hacer que las peticiones pasen a través del servidor Apache, podemos utilizar el puerto estándar 80, 443, o el que nosotros queramos.

Así pues me voy a centrar en la instalación y configuración de Subsonic a través de Apache. Parto del supuesto de que ya tenemos una máquina con apache funcionando correctamente. Si no fuera así, os recomiendo el tutorial de F O R A T, en el que lo explica de una manera muy sencilla y eficaz. En mi caso lo tengo con Ubuntu 8.04 Server, y la versión de Apache es la 2.2.8.

Después de leer muchos (bueno, no tantos…) howtos por ahí, la mayoría demasiado obsoletos, la única forma que he encontrado de hacerlo funcionar es utilizando el tutorial de Tim Conrad.

1. Requisitos

Para que todo funcione necesitamos algunos paquetes que se encuentran en los repositorios normales.

sudo aptitude install sun-java6-bin sun-java6-jdk sun-java6-jre lame lame-extras libapache2-mod-jk

De este modo instalaremos java, lame para la parte de transcoding, y mod_jk, un modulo necesario para la comunicación entre Tomcat y Apache.

2. Creación de un usuario tomcat y de un directorio para subsonic

Creamos un grupo tomcat

sudo groupdadd tomcat

Creamos el usuario tomcat dentro del grupo

sudo useradd -m -g tomcat tomcat

En el tutorial de Tim Conrad se recomienda no asignar una password para este usuario, ya que nunca tendremos que logearnos con él, y simplemente haremos su cuando necesitemos utilizarlo. En mi caso este método no funciona, ya que cuando intento hacer un su tomcat, me pide su password, y simplemente dar el enter no funciona. Así que me vi obligado a asignarle una contraseña (digamos 12345) y entonces todo funcionó correctamente. Es muy posible que esté haciendo algo mal, ya que no soy ningún experto en linux, así que si alguien tiene una explicación, se agradecerá.

Creamos la password para el usuario tomcat

sudo passwd tomcat

e introducimos la password (12345 en este ejemplo) cuando nos la pida.

A continuación creamos el directorio /var/subsonic y se lo asignamos al usuario tomcat

sudo mkdir /var/subsonic
sudo chown tomcat:tomcat /var/subsonic

Ahora añadimos la variable JAVA_HOME a nuestro .bashrc

sudo nano ~/.bashrc

y copiamos esta línea al final del fichero

JAVA_HOME=/usr/lib/jvm/java-6-sun-1.6.0.06/; export JAVA_HOME

Asegúrate de que el directorio existe. Si has instalado una versión de java diferente a la mía, tendrás que cambiar la línea anterior para que apunte a la carpeta correcta.

Cierra tu terminal y abre uno nuevo (al menos yo tuve que hacer esto para que me exportara la nueva variable JAVA_HOME). Seguro que hay otras formas más inteligentes de hacer esto.

3. Instalación de Tomcat

Ahora cambiamos al usuario tomcat

su tomcat

y ponemos la password cuando nos la pida (12345)

Descargamos la última versión de Apache-Tomcat (en el momento de escribir esto, era la 6.0.18). Compruébalo aquí.

cd ; wget http://apache.norhex.com/tomcat/tomcat-6/v6.0.18/bin/apache-tomcat-6.0.18.tar.gz

Descomprimimos

tar -xvzf apache-tomcat-6.0.18.tar.gz

Ahora necesitamos crear un usuario para manejar Tomcat. Lo hacemos editando el fichero ~/apache-tomcat-6.0.18/conf/tomcat-users.xml

nano ~/apache-tomcat-6.0.18/conf/tomcat-users.xml

y reemplazando todo el contenido por lo siguiente

<?xml version=’1.0′ encoding=’utf-8′?>
<tomcat-users>
<role rolename=”manager”/>
<role rolename=”tomcat”/>
<role rolename=”admin”/>
<role rolename=”role1″/>
<user username=”admin” password=”PON_AQUI_LA_PASSWORD_QUE_QUIERAS” fullName=”” roles=”admin,manager,role1,tomcat”/>
</tomcat-users>

La instalación por defecto hace que Tomcat escuche en el puerto 8080. Si esto te viene bien, estupendo. En caso de que necesites cambiarlo, tienes que editar el fichero ~/apache-tomcat-6.0.18/conf/server.xml

nano ~/apache-tomcat-6.0.18/conf/server.xml

En las líneas 67 y 73 encontrarás el 8080. Cámbialo por el puerto que quieras asignar a Tomcat (En mi caso lo he cambiado por el 8180).

Ahora vamos a iniciar Tomcat y a asegurarnos que podemos acceder a él. Para ello, todavía como el usuario tomcat, tecleamos

cd ~

./apache-tomcat-6.0.18/bin/startup.sh

y deberíamos ver lo siguiente

Using CATALINA_BASE: /home/tomcat/apache-tomcat-6.0.18
Using CATALINA_HOME: /home/tomcat/apache-tomcat-6.0.18
Using CATALINA_TMPDIR: /home/tomcat/apache-tomcat-6.0.18/temp
Using JRE_HOME: /usr/lib/jvm/java-6-sun-1.6.0.06/

Ahora vamos a nuestro navegador y tecleamos la dirección http://nombredetuservidor:8180

Deberíamos ver la pantalla de bienvenida de Tomcat

Pantalla inicial de Tomcat

Hacemos click en Tomcat Manager, e introducimos el nombre de usuario admin, y la password que configuramos antes en el fichero tomcat-users.xml

4. Instalación de Subsonic

A continuación vamos a instalar Subsonic. Para ello nos descargamos la última versión de su página oficial. Sólo necesitamos el fichero WAR., así que descomprimimos el .zip y guardamos el .war en algún sitio.

Tanto la descarga del fichero WAR como la instalación que vamos a hacer a continuación la puedes hacer desde cualquier ordenador con navegador, no es necesario que sea desde el mismo servidor. Además, como en mi caso, es posible que no dispongas de entorno grafico ni navegador en el servidor.

Si bajamos un poco en la pagina de administración de Tomcat, veremos una sección llamada Deploy, y dentro de esta, un apartado que pone WAR file to deploy. Pulsamos en Browse, buscamos nuestro fichero .war y damos a Deploy.

Nos fijamos en la parte superior de la página, y deberíamos ver un OK. Si ha habido algún error al hacer el deploy, nos aparecerá aquí también. En mi caso me dio algún error de permisos, con lo que tuve que revisar que el directorio /var/subsonic existía y que pertenecía al usuario tomcat. Una vez arreglado esto lo pudo cargar sin problemas.

Si el deploy del fichero war ha ido correctamente, en la sección Applications, deberíamos ver que aparece /subsonic y en la columna running aparece true.

Ahora deberíamos ser capaces de acceder a Subsonic a través de Tomcat. Para ello abrimos de nuevo el navegador y vamos a la dirección http://nombredetuservidor:8180/subsonic

Veremos la pantalla principal de subsonic y entramos con el usuario por defecto que es admin, y password admin.

Ahora lo primero, vamos a Settings, Users, y cambiamos la contraseña de admin por la que queramos. A continuación puedes realizar la configuración básica de Subsonic, indicarle dónde está tu colección de música, etc.

Una vez terminado esto, aún tenemos que hacer que Tomcat funcione a través de nuestro servidor Apache.

5. Haciendo que Tomcat y Apache trabajen juntos

Primero habilitamos el modulo jk (si aun sigues como usuario tomcat, vuelve a tu usuario normal)

sudo a2enmod jk

A continuación creamos el fichero /etc/apache2/workers.properties

sudo nano /etc/apache2/workers.properties

con el siguiente contenido

# Define 1 real worker using ajp13
worker.list=subsonic
# Set properties for subsonic (ajp13)
worker.subsonic.type=ajp13
worker.subsonic.host=localhost
worker.subsonic.port=8009

A pesar de la tentación, el último 8009, no debes cambiarlo a 8180 (yo lo hice). Es el puerto en el que escucha el modulo apj13 y ese es el puerto por defecto.

Ahora creamos el fichero /etc/apache2/conf.d/mod_jk.conf

sudo nano /etc/apache2/conf.d/mod_jk.conf

y ponemos el siguiente texto dentro

JkWorkersFile /etc/apache2/workers.properties

# Where to put jk shared memory
# Update this path to match your local state directory or logs directory
JkShmFile /var/log/apache2/mod_jk.shm

# Where to put jk logs
# Update this path to match your logs directory location (put mod_jk.log next to access_log)
JkLogFile /var/log/apache2/mod_jk.log

# Set the jk log level [debug/error/info]
JkLogLevel info

# Select the timestamp log format
JkLogStampFormat “[%a %b %d %H:%M:%S %Y] “

Lo normal sería que te funcionase sin hacer ningún cambio, pero comprueba las rutas para ver que son correctas y corrígelas si es necesario.

Por ultimo reiniciamos Apache

sudo /etc/init.d/apache2 restart

y comprobamos que no da ningún mensaje de error al iniciarse.

Si todo ha ido bien, ahora deberías ser capaz de acceder a subsonic utilizando http://nombredetuservidor/subsonic

En mi caso particular todo funciona bien, incluso el streaming, aunque dentro de la red de mi empresa está bloqueado (no tengo ni idea de por qué funciona). De todos modos, aunque no funcionara, soy capaz de navegar por mi colección de musica, y descargar los temas que quiero escuchar.

FUENTES

Instalar Tomcat a través de Apache — Tim Conrad

Instalar Tomcat en modo “stand-alone” — Only Ubuntu Linux

Dónde oi hablar por primera vez de Subsonic y me picó el gusanillo — Ubuntu Linux