temax
sucede que haciendo una prueba con el vps conectado via ssh
queria dejar
corriendo un comando
> youtube-dl -f best -ciw -v 'https://www.youtube.com/channel/UCbGYYbuGLFC6wIsyKXXW4cQ'
y salir de la sesion, dejando al vps a su bola, p-e-r-o, p-e-r-o, p-e-r-o si sales de la sesion ssh, tu comando tambien se corta
y esto no se soluciona poniendo un &
al final del comando, por que este
(supongo y sin idea) “proceso” es un “hijo” de tu shell que es un hijo de tu
sesion y si la sesion se muere, el padre mata a todo mundo. Ja, ja, ja, ha
Como solucionar esto? pues teniendo un shell que sea “hijo de un demonio😈” que ande a su bola, e invocarlo cuando nos venga en gana
y todo esto que suena tan complicado y misterioso, es mas facil de lo que parece (creo). Encima podemos hacerlo con emacs, aunque igual, segun la situacion podriamos recurrir a otros dos programitos habitualmente disponibles en cualquier distribucion
emacs
emacs tiene un modo demonio que sirve para dos cosas:
cargar emacs una vez y luego lanzar instancias que comparten la misma sesion pero se manifiestan a la velocidad del rayo
volver independiente tu sesion de una shell, fuera esta en ssh o en modo texto o grafico
primero, para activar el modo demonio lanzamos el siguiente comando
> emacs --daemon
esto no lanzara ningun emacs, simplemente colocara bajo las sombras una sesion
con la que podremos contactar. Para hacer esto necesitamos un comando particular
llamado emacsclient
. Como la mayoria de las cosas, no es tan sencillo. Si lo
lanzamos tal cual
> emacsclient
emacsclient: file name or argument required
Try 'emacsclient --help' for more information
nos dira que intentemos ver la ayuda. Si bien, esta ayuda es basta, podriamos simplificarla a dos opciones utiles
> emacsclient -c
que nos lanza emacs en el buffer scratch.
dejemos una marca en dicho buffer para identificar nuestros pasos.
Colocando por ejemplo, la frase "hola soy emacsclient uno"
bien, terminemos emacs como se haria habitualmente C-x C-c
e invoquemos de
nuevo a nuestro emacs-demonio emacsclient -c -nw
hala, nuestro mensaje sigue hay!
ahora en nuestra terminal (tilix) dividida, lanzamos de nuevo emacsclient -c -nw
de nuevo lo mismo
y si cerramos uno o todos los emacsclient
da igual,
lo que en ellos hagamos permanecera mientras no se apague el sistema o cerremos
el modo demonio
la otra forma en la que podemos lanzar emacsclient, consiste en indicar que ficheros abrir
> emacsclient fichero1 fichero2 ...
y ahora con esto, podriamos resolver el problema inicial. Abrimos una shell,
ponemos el comando a ejecutar, salimos (C-x C-c
), cerramos el ssh
y
regresamos cuando lo creamos conveniente. El demonio de emacs con todos
sus buffers y demas cosas, seguira realizando su labor!
y ahora? pues para terminar con el modo demonio, desde un emacsclient
M-x server-mode
nos dira que actualmente hay un servidor con clientes, que si lo queremos terminar de todas maneras, a lo que diremos que si.
cosas
emacs es un entorno centrado en el texto, que puede dividirse, expandirse y adaptarse de formas inimaginables, sin embargo, una terminal pura donde ejecutar programas visuales e interactivos escritos cada uno en su lenguaje, con sus propias librerias y forma de entender sus combinaciones de teclado, igual y queda en otra liga mas alla de los fines de emacs
tambien, aunque emacs posee su propia terminal (tonta) eshell, lo mejor es lanzar programas no interactivos. Ademas eshell, sola hay una y solo una, Emacs no es multiproceso, o hace una cosa o hace otra, pero no dos al mismo tiempo. Si lo que necesitamos son varias shell reales, lo mas conveniente seria recurrir a otras herramientas
GNU Screen
esto es un multiplexor de terminal, que segun la wikipedia:
es una aplicación de software que puede utilizarse para varias sesiones de inicio de sesión independientes basadas en seudoterminales dentro de una única pantalla de terminal, una ventana de emulador de terminal, una consola de sistema de PC/puesto de trabajo o una sesión de inicio de sesión remota, o para separar y volver a adjuntar sesiones de un terminal. Es útil para tratar con múltiples programas desde una interfaz de línea de comandos, y para separar programas de la sesión de la shell de Unix que inició el programa, particularmente para que un proceso remoto continúe ejecutándose incluso cuando el usuario está desconectado.
pero que en resumidas palabras, podria resumirse en un “emacs” para las terminales o como “un entorno de escritorio para las terminales”
y que podemos hacer con esto? tras instalar gnu screen (buscarlo como screen
en su distribucion) y lanzarlo por primera vez
> screen
nos resivira con un bonito mensaje
tras presionar espacio
, aparecera el prompt de nuestra shell de siempre, donde
lanzar los comandos de siempre
bien no? pues si… a-u-n-q-u-e, cuando salimos de la terminal, no salimos de la
terminal, saldremos de la terminal en screen
[screen is terminating]
volvamos a lanzarla de nuevo y veamos como demonios (ja, ja, que cachondo) utilizar este invento
primero, screen
tiene algunas influencias emacseras, y como este, tiene un
prefijo para hacer cosas, que por defecto es C-a
(Control
y a
al mismo
tiempo) seguido por una (o mas) combinaciones que serian el comando en si, por
ejemplo, si presionamos C-a d
saldremos de screen
pero sin cerrar
screen
, que seguira en “segundo plano” a su rollo, rollo al que podemos
regresar
como hacer esto? no es tan sencillo, primero deberemos averiguar el nombre de nuestra “sesion” y re-enlazar a ella
mientras haciamos el C-a d
nos lanzaba la siguiente salida
[detached from 6469.pts-3.tachikoma]
un dato similar podemos obtenerlo con el siguiente comando
> screen -ls
There is a screen on:
6469.pts-3.tachikoma (Detached)
1 Socket in /run/screens/S-nasciiboy.
donde el dato importante es ese que va luego del punto del numero, hasta el
primer espacio, es decir (y en este caso particular) pts-3.tachikoma
. Dicho
valor nos servira para recuperar la sesion
> screen -x pts-3.tachikoma
bonito no? ehhhh, mas o menos. Salgamos sin cerrar e iniciemos una nueva sesion con un nombre mas sencillo
> screen -S mi-sesion
de nuevo, tendriamos otra terminal…
repitiendo el listado de sesiones
> screen -ls
There are screens on:
7832.mi-sesion (Detached)
6469.pts-3.tachikoma (Detached)
2 Sockets in /run/screens/S-nasciiboy.
guaaa, que emocionante…
para contactar a esta nueva sesion
> screen -x mi-sesion
y? pues ahora un par de cosas medio chulas, primero podemos dividir la pantalla
¡en dos! presionando C-a S
luego puedes saltar a esta nueva division con C-a TAB
. Ver el cursor en esta nueva
seccion, apretar los botones a lo loco y ver que no pasa nada
hasta que invoques una shell en este espacio con el comando magico C-a c
dividir nuevamente la ventana (ahora en vertical) C-a |
, saltar a esta C-a
TAB
, nueva shell C-a c
y sonreir locamente
ahora como cerrar este conjunto, si salimos de la shell (C-d
o con exit
) la
seccion no desaparecera, seguira hay hasta que presionemos C-a X
…
si por alguna razor quisieramos cambiar el prefijo C-a
por otro distinto, por
ejemplo C-b
, tenemos dos opciones crear un fichero .screenrc
en nuestro home
con el contenido
escape ^Bb
con lo que el comando prefijo quedaria fijado a C-b
por siempre jamas, o bien, lanzar
screen
de la siguiente manera
> screen -e^bB
y pocas cosas mas puedo comentar sobre screen
y sus fabulosas cualidades. Para
mas informacion dentro de la misma sesion presionar c-a ?
invoca a la ayuda. tambien
podriamos ver la pagina del manual
tmux
y… tmux es mas o menos como screen
, tambien va a su rollo y puede sobrevivir
al cuelgue de una sesion ssh, tiene combinaciones “tipo emacs” y sirve de
“entorno de escritorio para las terminales”, p-e-r-o, p-e-r-o, p-e-r-o, por
defecto es algo mas amigable y 🌈moderno🌈 (1987
vs 2007) aunque ambos estan escritos en c
y cual escogeria screen o tmux? pues, tmux! aunque si hay necesidad, se usar los dos!
y ahora, como usarlo
> tmux
como vemos, a diferencia de screen
, tmux
se nos comera una fila al final de
la pantalla, muy a lo emacs
. Otra diferencia particular, empieza por el
prefijo, que en lugar de ser C-a
pasa a ser C-b
(y encuentro mas comodo).
Ademas de eso al dividir la pantalla en sus diferentes formas
C-b "
division horizontalC-b %
division vertical
aparecera una shell sin hacer nada mas
podemos deambular por las “divisiones” con
C-b o
saltar a la siguienteC-b ←
saltar a la derechaC-b ↑
saltar arribaC-b →
saltar a la derechaC-b ↓
saltar abajoC-b C-←
redimencionar hacia la derechaC-b C-↑
redimencionar hacia arribaC-b C-→
redimencionar hacia la derechaC-b C-↓
redimencionar hacia abajo
tambien centrar la atension en la shell actual sin romper la distribucion de las ventanas con
C-b z
(zoom) y luego restaurar con otro C-b z
o incluso y mas locochon, hacer que las shells cambien de sitio con C-b C-o
o hacer aparecer un reloc ascii gigante con C-b t
u otras cosas mas chulas como agregar “nuevos escritorios” con C-b c
e ir y venir entre escritorios con
C-b n
siguienteC-b p
anteriorC-b 0
,C-b 1
C-b …
, escritorio 0, escritorio 1, …
o C-b w
, que nos permite elegir visualmente
salir de esta secion sin cerrarla con C-b d
y recuperarla con
tmux attach
tambien, podriamos no salir de dicha sesion e ingresar en ella desde otra
terminal, repitiendo tmux attach
que hace una cosa muy chula; adaptarse y limitar lo que se ve en la sesion
con las dimenciones de la mas pequeña. Ademas, como en screen
podemos darle un
nombre a una sesion y vincularnos a ella
> tmux new-session -s mi-sesion # lanzar
> tmux attach -t mi-sesion # conectar
> tmux list-sessions # listar sesiones
esto y muchas cosas mas que pueden o no ser de interes, empiezan consultando la
ayuda incluida C-b ?
, su pagina man o si se desea un librillo con comentarios
https://leanpub.com/the-tao-of-tmux/read
aunque creo que el nombre “the tao of” le viene grande, pues no enseñan un flujo o estrategia de trabajo. Solo comandos con imagenes, que puedes descubrir por tu cuenta, como el obscuro proceso para congelar la pantalla, seleccionar texto y pegarlo en donde se nos ocurra aun sin sesion grafica!
en fin, yo estoy utilizando tmux para dejar corriendo en el servidor comandos de prolongado tiempo y tambien para ejecutar weechat “acumulando logs” por dias y dias en salas de irc… mera investigacion de la fauna…
happy hacking!