¿Cómo mantener los procesos en ejecución después de finalizar la sesión ssh?
644
Digamos que lanzo un montón de procesos desde una sesión ssh. ¿Es posible terminar la sesión ssh mientras se mantienen esos procesos ejecutándose en la máquina remota?
tmuxes superior a screenpor muchas razones, aquí hay algunos ejemplos:
Windows puede moverse entre sesiones e incluso vincularse a varias sesiones
Windows se puede dividir horizontal y verticalmente en paneles
Soporte para terminales UTF-8 y 256 colores.
Las sesiones se pueden controlar desde el shell sin la necesidad de ingresar a una sesión
Funcionalidad Básica
Para obtener la misma funcionalidad que se explica en la respuesta recomendada screen, deberá hacer lo siguiente:
ssh en la máquina remota
comenzar tmuxescribiendo tmuxen el shell
inicie el proceso que desee dentro de la tmuxsesión iniciada
salir / separar la tmuxsesión escribiendo Ctrl+ by luegod
Ahora puede cerrar sesión de forma segura desde la máquina remota, su proceso seguirá ejecutándose dentro tmux. Cuando regrese de nuevo y desee verificar el estado de su proceso, puede usarlo tmux attachpara adjuntarlo a su tmuxsesión.
Si desea que se ejecuten varias sesiones en paralelo, debe nombrar cada sesión con Ctrl+ by $. Puede obtener una lista de las sesiones que se ejecutan actualmente utilizando tmux list-sessions, ahora adjunte a una sesión en ejecución con el comando tmux attach-session -t 0.
tmuxpuede hacer cosas mucho más avanzadas que manejar una sola ventana en una sola sesión. Para obtener más información echar un vistazo en el man tmuxo la página tmux GitHub . En particular, aquí hay una pregunta frecuente sobre las principales diferencias entre screeny tmux.
@CraigM Use screen -x -r [screenname]o screen -rxpara abreviar si solo tiene una sesión de pantalla activa. Esto le permite adjuntar una instancia de pantalla existente.
Lekensteyn el
55
Este consejo me ayudó con el mismo problema, pero creo que incluye un error tipográfico. Estoy bastante seguro de que necesita escribir Ctrl-by luego dpara salir / separar la tmuxsesión. Ciertamente, ese es el caso de la versión de tmuxen mi Ubuntu 12.04.
cxrodgers
17
Cometí un error al seguir las instrucciones anteriores. Lo compartiré si alguien puede caer en el mismo error: comencé tmux en el shell de mi propia computadora en lugar del shell de la computadora remota. Uno necesita iniciar tmux en el shell de la computadora remota.
Alternativamente, ejecute en tmux detachlugar de escribirctrl-b d
Andrew
306
Opción 1: nohup
La mejor manera es a menudo la más simple.
nohup long-running-command &
Fue hecho específicamente para esto, incluso registra registros estándar nohup.log.
man nohup
Opcion 2: bg
Si desea "en segundo plano" algunas tareas que ya se están ejecutando, su mejor opción es Ctrl+ y Zluego ejecutar
bg
para poner en segundo plano la tarea suspendida más reciente y permitirle seguir ejecutándose.
Luego, un rápido disowndebería mantener el proceso en ejecución después de cerrar sesión.
screeny otros pueden hacerlo, pero para eso no están. Recomiendo nohuppara tareas que sabe que va a dejar atrás y bgpara tareas que ya está ejecutando y no desea reiniciar.
Tenga en cuenta que ambos son específicos de bash. Si no está usando bash, entonces los comandos podrían ser diferentes.
Curiosamente, screen y tmux no funcionan para mineros, pero no funciona
Yasin Okumuş
1
bg+ disownno funcionó para mí. Tenía un script de implementación ejecutándose. Olvidé comenzar dentro de tmux y necesitaba irme temprano para una reunión. El script genera continuamente progreso en el shell. ctrl+zdetuve el proceso y me devolvió a bash. bgreanudó el proceso, pero también reanudó la salida del estado a bash, por lo que es imposible ver lo que estaba escribiendo. Sin embargo, un disowncomando produjo "disown: current: no such job"
BrianHVB
esto no funcionó para mí julia myFile.jlpor cualquier razón. tmux lo hace y es genial.
ssh en su caja remota. Escriba screenLuego comience el proceso que desee.
Presione Ctrl- Aluego Ctrl- D. Esto "separará" su sesión de pantalla pero dejará sus procesos en ejecución. Ahora puede cerrar sesión en la caja remota.
Si desea volver más tarde, inicie sesión nuevamente y escriba screen -rEsto "reanudará" su sesión de pantalla, y podrá ver el resultado de su proceso.
Por lo general, nombraré mis sesiones de pantalla screen -S namepara que sea más fácil conectarme a la correcta más tarde.
David Oneill
El enlace está inactivo
Gab 是 好人
1
Personalmente, estoy trabajando en una caja sin ningún software de control de paquetes. Después de pasar aproximadamente media hora construyendo dependencias para TMUX (con las que personalmente tengo experiencia y me gusta) desde el origen, quedó claro que la pantalla era la solución mejor y más simple para mí. TL; DR: la solución óptima para este problema depende del caso de uso, la máquina y cuánto tiempo tiene que configurar. Gracias por esta respuesta :)
Max von Hippel
¡La combinación con screen -Santes de salir y screen -ral regresar es increíble!
Meloman
Gracias por esto. Esta solución funcionó para mí mientras que tmux no (utilizo una versión de bash para Windows mientras estoy en una máquina Linux)
Michael Sorensen
83
Screen and nohup es la mejor manera, pero si tiene que separar un proceso que ya se está ejecutando sin screen o nohup, puede ejecutar el comando disown.
disown [-ar] [-h] [jobspec… |pid… ]
Sin opciones, elimine cada especificación de trabajo de la tabla de trabajos activos. Si -hse da la opción, el trabajo no se elimina de la tabla, sino que se marca para que SIGHUP no se envíe al trabajo si el shell recibe un SIGHUP. Si jobspec no está presente, y no se proporciona -ani la -ropción, se utiliza el trabajo actual. Si no se proporciona una especificación de trabajo , la -aopción significa eliminar o marcar todos los trabajos; la -ropción sin un argumento jobspec restringe la operación a trabajos en ejecución.
Con disown puedes cerrar la terminal y hacer que el proceso se ejecute en la máquina.
Esta es también mi forma favorita de hacerlo. Yo uso con frecuenciadisown -a && exit
Stefano Palazzo
1
Perfecto. ¡Este es un comando encantador y merece todos los votos positivos!
Greg
8
una palabra de precaución, detuve un proceso en ejecución con Ctrl-Z y no lo inicié en segundo plano antes de llamar disowny lo mató.
HDave
3
Puede bloquearse si quiere escribir en la terminal. Redirigir la salida de un proceso en ejecución no es tan fácil. Es mejor comenzarlo correctamente con nohup.
jiggunjer
2
Esta es una buena respuesta, porque responde directamente a la pregunta. El autor de la pregunta preguntó qué hacer después de haber ejecutado un montón de comandos de larga ejecución. La mayoría de estas respuestas le permiten saber qué hacer antes de ejecutar los comandos.
q0rban
53
Estaba atrapado en un gran MV, así que no estaba en condiciones de detener el proceso, configurar la pantalla y luego volver a iniciarlo. Logré salir de la sesión ssh con el proceso ejecutándose esencialmente haciendo los siguientes pasos:
ssh [servidor]
mando
Ctrl+Z
bg
disown [proceso pid opcional, predeterminado para durar]
salida
El paso 3 pausa el proceso actual (por ejemplo, mi comando 'mv').
El paso 4 pone el proceso en pausa en segundo plano y lo reanuda.
El paso 5 te permite rechazar el proceso. ** Para obtener una lista de trabajos simplemente escriba jobsantes.
** Con respecto a disown (del manual bash):
disown [-ar] [-h] [jobspec ... | pid ... ]
Without options, remove each jobspec from the table of active
jobs. If jobspec is not present, and neither the -a nor the -r
option is supplied, the current job is used. If the -h option
is given, each jobspec is not removed from the table, but is
marked so that SIGHUP is not sent to the job if the shell
receives a SIGHUP. If no jobspec is supplied, the -a option
means to remove or mark all jobs; the -r option without a job‐
spec argument restricts operation to running jobs. The return
value is 0 unless a jobspec does not specify a valid job.
Los incorporados son siempre mi primera opción :) THX
ken_oy
Esta respuesta debe marcarse como correcta. Instalar y acostumbrarse a la pantalla para resolver este problema es exagerado.
Ulrich-Lorenz Schlüter
Esto es muy útil cuando ya ha iniciado cualquier comando y se está ejecutando durante mucho tiempo. Terminar e iniciarlo en una sesión TMUX llevará tiempo
Deepali Mittal
1
@ tom-brossman: ¡Cuidado con ediciones innecesarias como esta ! Si se invoca sin especificación de trabajo, el disowncomando incorporado actúa en el trabajo en segundo plano más reciente.
David Foerster
22
Hay dos programas principales que puede usar para mantener los programas y el estado del terminal a través de múltiples conexiones ssh. Son de pantalla (el titular, pero desafortunadamente no se mantiene . Aparentemente se está desarrollando activamente ahora ) y tmux (más nuevo, mantenido activamente). Byobu es un front end que puede ejecutarse sobre estos sistemas y ofrecer información adicional sobre el estado de ubuntu. En las nuevas instalaciones, usará tmux como backend, si tiene una instalación anterior de byobu y una configuración existente mantendrá el backend anterior, ya sea screen o tmux.
Byobu
Byobu se puede instalar en la computadora al hacerlo en una máquina basada en Debian:
sudo aptitude install byobu
Usando mmm, lo haces
su -c 'yum install byobu'
También es posible instalar byobu en otras distribuciones.
Usando byobu
Puede iniciar byobu ejecutándose byobuen la máquina host después de conectarse usando ssh. Esto le dará un shell que se ve así:
También puede usar Byobu Terminal en una máquina Ubuntu con la opción -X y tener un byobu que funcione perfectamente.
Uso:
Comience byobu escribiendo byobu.
Puede presionar F2 para crear una nueva ventana dentro de la sesión actual, F3-F4 para cambiar entre las diferentes ventanas.
La mejor parte de byobu es que no tienes que matar los procesos que se ejecutan en el terminal para abandonar el terminal. Simplemente puede enviar screen / tmux (el esqueleto de byobu) al fondo y reanudar la próxima vez que venga:
Para dejar byobu y mantenerlo en funcionamiento (separar) presione F6.
La próxima vez que vengas, solo hazlo byobuy deberías regresar a donde estabas.
También puede crear varias sesiones de byobu por byobu -S session1y así sucesivamente. Y puede conectarse a cualquiera de ellos cuando regrese.
Puedes hacer mucho más con Byobu. Úsalo! Algunas guías definitivas están aquí o aquí .
Intenté usar byobu desde una sesión basada en PuTTY en mi cuadro de Ubuntu, pero la línea de estado se repite y aparece en la pantalla. Aunque se separó correctamente al presionar F6, no era una solución utilizable en mi configuración.
jfmessier
1
@jfmessier Es porque PuTTY no toma ncurses (utf-8 básicamente) bien. Es posible eliminar este problema siguiendo este hilo - stackoverflow.com/questions/10731099/…
SiddharthaRT
¡Esto es asombroso! 1. me da un mensaje bash de color que parece que no puedo habilitar con bash como mi shell predeterminado y 2. ¡Puedo ejecutar 2 bots al mismo tiempo y todavía tengo otro terminal para trabajar! @SiddharthaRT te mereces un voto positivo señor!
Dev
18
No puede hacer esto una vez que el proceso ha comenzado, debe haber configurado las cosas antes de ejecutar un trabajo de larga duración.
Puede usar nohup, pero la sabiduría moderna sugiere que use screen o byobu como inicio de sesión para que pueda separar y dejar las cosas en funcionamiento.
La pantalla tiene la ventaja de que puede desconectarse de una máquina y volver a conectarla a otra, lo cual es útil si desea verificar procesos de larga ejecución que se ejecutan más allá del final de la jornada laboral.
byobu pone una interfaz fácil de usar en la parte superior de la pantalla con menús, etc. También es la implementación actual de la pantalla en ubuntu más reciente. F2 para iniciar un nuevo terminal F3 / F4 para alternar y F6 para desconectar. Escriba exit para realmente terminar terminales permanentemente.
"No puede hacer esto una vez que el proceso ha comenzado, debe haber configurado las cosas antes de ejecutar un trabajo de larga duración". - No, puedes usar disownpara lograr esto. Ver la respuesta de @ bassgey
Rich
1
después de luchar para aprender pantalla y tmux ... byobu me hizo llorar
HDave
disowny si es necesario Ctrl-z, bgpara obtenerlo del terminal activo y en segundo plano. A continuación, disown.
mimoralea
8
Hola, si bien acepté que la pantalla es la opción más efectiva. Puede usar vncserver y luego iniciar el proceso en él.
Además, si su único interés es tener el proceso en ejecución y no es necesario recuperar el control, y lo más importante es que no estaba al tanto de que necesitará cerrar la sesión y ya tiene el proceso en ejecución, no tiene suerte si usaste bash como el caparazón
Primero debe enviar el proceso a segundo plano escribiendo Ctrl + Z seguido de bg% 1 (el número depende del número de trabajo, generalmente es 1, pero puede extraer fácilmente la lista usando los trabajos de comando)
Finalmente invoque el comando renegado (seguido del jobid ... igual que con el comando bg)
Esto eliminará la relación padre-hijo entre su shell y el proceso en segundo plano, evitando que muera cuando finalice su shell.
¡Esta respuesta es la mejor! ¿Por qué están hablando todos? screenLa pregunta se planteó después del inicio de sesión, cómo mantener los procesos en ejecución, ahora después de iniciar sesión pero antes de iniciarlos. Gran respuesta Jorge, ¡realmente me has ayudado! :)
jwbensley
1
Simplemente bg(sin %1) suele ser suficiente, ya que el trabajo predeterminado es el trabajo actual
Walter Tross
Sería bueno tener una respuesta integral: A priori (configuración anticipada): pantalla de terminal ascii (antigua), tmux (neewer); X windows: vnc (antiguo, aún mantenido), xpra (más nuevo), con xpra sin root. Un posterior (que persiste después de que comenzaste): ^ Z, renegado, ... Pero soy demasiado vago para desarrollarlo más que esto.
Krazy Glew
8
Para un script de shell único que he estado ejecutando durante un largo período de tiempo, iniciaré sesión y ejecutaré el proceso en segundo plano usando '&'.
Ejemplo:
/path/to/my/script &
Me desconecté y desconecté mi sesión SSH. Cuando inicio sesión más tarde, el script todavía se está ejecutando, como lo demuestra la recopilación continua de datos del script.
Sí, me gustaría saber cómo screen / tmux es mejor que esta solución simple.
Mads Skjern
Sí, también puedo ver esto en mi ubuntu, pero no debería suceder en teoría. No entiendo por qué
Daniel Pinyol
1
@MadsSkjern Porque no puede ingresar ninguna entrada en el script utilizando este método.
Ken Sharp
1
@MadsSkjern, la razón es que si ejecuta procesos como este &si cierra la sesión y accede a su sesión SSH, el proceso seguirá ejecutándose, sin embargo, no podrá ver la salida de ese proceso (si su script hizo eco de algo no lo verá, pero si escribe un archivo, el archivo estará allí)
DarkCygnus
4
Deberías revisar la pantalla GNU y ver si te ayuda. Dependiendo de cómo necesite que su aplicación se ejecute en tiempo real, puede causar más problemas de los que resuelve, pero al menos le permitirá reanudar su sesión como si nunca la abandonara.
Cómo utilizar :
Use el comando screenpara el primer inicio, desplácese por los mensajes de introducción, debería recibir un terminal.
Ca Cc abre otra terminal
Ca Ck mata una terminal
Puede usar Ca C-Space y Ca C-Backspace para recorrer las terminales.
Ca Ca es útil si usas principalmente dos terminales
Ca Cd desconecta la sesión de pantalla actual y sale de las pantallas. Luego puede usar screen -rpara reanudar esa sesión. Puede tener varias sesiones de pantalla separadas a la vez, en este caso se le mostrará una lista de sesiones disponibles.
Hay muchas otras opciones, por ejemplo, pantallas divididas, y también todos los accesos directos son totalmente personalizables.
Si bien todos dicen usar disown(la única opción que tiene después de que ya comenzó el proceso), nohupo incluso ejecutar el comando screen, lo cual es útil si desea ver toda la salida del comando ... Soy fanático de screen.. Todavía he intentado las distribuciones mainstream más recientes de Linux y simplemente poner el trabajo en segundo plano y dejar de fumar no hace que todos los procesos que se están ejecutando mueran. Debe haber un entorno global o algo así. Estoy intentando esto en algunos sistemas bastante antiguos (slackware 12) y mi script de prueba sigue ejecutándose hasta que lo elimino manualmente:
Aunque estoy de acuerdo que screensería la mejor manera de manejar esto, aunque mi guión escribió a archivos o lo que sea .. nunca he necesitado utilizar ingrese disown -a o nohupmenos que estaba fuera de la paranoia completa. ¿Quizás alguien pueda arrojar algo de luz sobre cómo se comporta bash por defecto? ¿Quizás algunos administradores del sistema cambien los valores predeterminados en los shells grandes para evitar que los procesos de sus usuarios sobrecarguen el sistema?
Si tiene alguna otra consulta, hágala como una nueva pregunta
heemayl
0
Desafortunadamente, una sesión SSH terminada puede provocar que tmux o la pantalla se apaguen. Esto se debe a systemdque finalizará cualquier proceso secundario al cerrar sesión en una sesión.
Puede cambiar esta configuración en su logind.conf( /etc/systemd/logind.conf):
Respuestas:
Debes buscar alternativas modernas como
tmux
.tmux
es superior ascreen
por muchas razones, aquí hay algunos ejemplos:Funcionalidad Básica
Para obtener la misma funcionalidad que se explica en la respuesta recomendada
screen
, deberá hacer lo siguiente:tmux
escribiendotmux
en el shelltmux
sesión iniciadatmux
sesión escribiendo Ctrl+ by luegodAhora puede cerrar sesión de forma segura desde la máquina remota, su proceso seguirá ejecutándose dentro
tmux
. Cuando regrese de nuevo y desee verificar el estado de su proceso, puede usarlotmux attach
para adjuntarlo a sutmux
sesión.Si desea que se ejecuten varias sesiones en paralelo, debe nombrar cada sesión con Ctrl+ by
$
. Puede obtener una lista de las sesiones que se ejecutan actualmente utilizandotmux list-sessions
, ahora adjunte a una sesión en ejecución con el comandotmux attach-session -t 0
.tmux
puede hacer cosas mucho más avanzadas que manejar una sola ventana en una sola sesión. Para obtener más información echar un vistazo en elman tmux
o la página tmux GitHub . En particular, aquí hay una pregunta frecuente sobre las principales diferencias entrescreen
ytmux
.fuente
screen -x -r [screenname]
oscreen -rx
para abreviar si solo tiene una sesión de pantalla activa. Esto le permite adjuntar una instancia de pantalla existente.Ctrl-b
y luegod
para salir / separar latmux
sesión. Ciertamente, ese es el caso de la versión detmux
en mi Ubuntu 12.04.tmux detach
lugar de escribirctrl-b d
Opción 1:
nohup
La mejor manera es a menudo la más simple.
Fue hecho específicamente para esto, incluso registra registros estándar
nohup.log
.Opcion 2:
bg
Si desea "en segundo plano" algunas tareas que ya se están ejecutando, su mejor opción es Ctrl+ y Zluego ejecutar
para poner en segundo plano la tarea suspendida más reciente y permitirle seguir ejecutándose.
Luego, un rápido
disown
debería mantener el proceso en ejecución después de cerrar sesión.screen
y otros pueden hacerlo, pero para eso no están. Recomiendonohup
para tareas que sabe que va a dejar atrás ybg
para tareas que ya está ejecutando y no desea reiniciar.Tenga en cuenta que ambos son específicos de bash. Si no está usando bash, entonces los comandos podrían ser diferentes.
fuente
disown -h
bg
+disown
no funcionó para mí. Tenía un script de implementación ejecutándose. Olvidé comenzar dentro de tmux y necesitaba irme temprano para una reunión. El script genera continuamente progreso en el shell.ctrl+z
detuve el proceso y me devolvió a bash.bg
reanudó el proceso, pero también reanudó la salida del estado a bash, por lo que es imposible ver lo que estaba escribiendo. Sin embargo, undisown
comando produjo "disown: current: no such job"julia myFile.jl
por cualquier razón. tmux lo hace y es genial.Podrías hacer eso usando
screen
.Escriba
man screen
para obtener más información o lea esta página de manual de la pantalla .Escenario simple:
ssh en su caja remota. Escriba
screen
Luego comience el proceso que desee.Presione Ctrl- Aluego Ctrl- D. Esto "separará" su sesión de pantalla pero dejará sus procesos en ejecución. Ahora puede cerrar sesión en la caja remota.
Si desea volver más tarde, inicie sesión nuevamente y escriba
screen -r
Esto "reanudará" su sesión de pantalla, y podrá ver el resultado de su proceso.fuente
screen -S name
para que sea más fácil conectarme a la correcta más tarde.screen -S
antes de salir yscreen -r
al regresar es increíble!Screen and nohup es la mejor manera, pero si tiene que separar un proceso que ya se está ejecutando sin screen o nohup, puede ejecutar el comando disown.
Con disown puedes cerrar la terminal y hacer que el proceso se ejecute en la máquina.
fuente
disown -a && exit
disown
y lo mató.Estaba atrapado en un gran MV, así que no estaba en condiciones de detener el proceso, configurar la pantalla y luego volver a iniciarlo. Logré salir de la sesión ssh con el proceso ejecutándose esencialmente haciendo los siguientes pasos:
El paso 3 pausa el proceso actual (por ejemplo, mi comando 'mv').
El paso 4 pone el proceso en pausa en segundo plano y lo reanuda.
El paso 5 te permite rechazar el proceso. ** Para obtener una lista de trabajos simplemente escriba
jobs
antes.** Con respecto a disown (del manual bash):
fuente
disown
comando incorporado actúa en el trabajo en segundo plano más reciente.Hay dos programas principales que puede usar para mantener los programas y el estado del terminal a través de múltiples conexiones ssh. Son de pantalla (el titular, pero desafortunadamente no se mantiene . Aparentemente se está desarrollando activamente ahora ) y tmux (más nuevo, mantenido activamente). Byobu es un front end que puede ejecutarse sobre estos sistemas y ofrecer información adicional sobre el estado de ubuntu. En las nuevas instalaciones, usará tmux como backend, si tiene una instalación anterior de byobu y una configuración existente mantendrá el backend anterior, ya sea screen o tmux.
Byobu
Byobu se puede instalar en la computadora al hacerlo en una máquina basada en Debian:
Usando mmm, lo haces
También es posible instalar byobu en otras distribuciones.
Usando byobu
Puede iniciar byobu ejecutándose
byobu
en la máquina host después de conectarse usando ssh. Esto le dará un shell que se ve así:También puede usar Byobu Terminal en una máquina Ubuntu con la opción -X y tener un byobu que funcione perfectamente.
Uso:
Comience byobu escribiendo
byobu
.Puede presionar F2 para crear una nueva ventana dentro de la sesión actual, F3-F4 para cambiar entre las diferentes ventanas.
La mejor parte de byobu es que no tienes que matar los procesos que se ejecutan en el terminal para abandonar el terminal. Simplemente puede enviar screen / tmux (el esqueleto de byobu) al fondo y reanudar la próxima vez que venga:
La próxima vez que vengas, solo hazlo
byobu
y deberías regresar a donde estabas.También puede crear varias sesiones de byobu por
byobu -S session1
y así sucesivamente. Y puede conectarse a cualquiera de ellos cuando regrese.Puedes hacer mucho más con Byobu. Úsalo! Algunas guías definitivas están aquí o aquí .
fuente
No puede hacer esto una vez que el proceso ha comenzado, debe haber configurado las cosas antes de ejecutar un trabajo de larga duración.
Puede usar nohup, pero la sabiduría moderna sugiere que use screen o byobu como inicio de sesión para que pueda separar y dejar las cosas en funcionamiento.
La pantalla tiene la ventaja de que puede desconectarse de una máquina y volver a conectarla a otra, lo cual es útil si desea verificar procesos de larga ejecución que se ejecutan más allá del final de la jornada laboral.
Hay una guía de inicio razonable para la pantalla aquí.
byobu pone una interfaz fácil de usar en la parte superior de la pantalla con menús, etc. También es la implementación actual de la pantalla en ubuntu más reciente. F2 para iniciar un nuevo terminal F3 / F4 para alternar y F6 para desconectar. Escriba exit para realmente terminar terminales permanentemente.
fuente
disown
para lograr esto. Ver la respuesta de @ bassgeydisown
y si es necesarioCtrl-z
,bg
para obtenerlo del terminal activo y en segundo plano. A continuación,disown
.Hola, si bien acepté que la pantalla es la opción más efectiva. Puede usar vncserver y luego iniciar el proceso en él.
Además, si su único interés es tener el proceso en ejecución y no es necesario recuperar el control, y lo más importante es que no estaba al tanto de que necesitará cerrar la sesión y ya tiene el proceso en ejecución, no tiene suerte si usaste bash como el caparazón
Primero debe enviar el proceso a segundo plano escribiendo Ctrl + Z seguido de bg% 1 (el número depende del número de trabajo, generalmente es 1, pero puede extraer fácilmente la lista usando los trabajos de comando)
Finalmente invoque el comando renegado (seguido del jobid ... igual que con el comando bg)
Esto eliminará la relación padre-hijo entre su shell y el proceso en segundo plano, evitando que muera cuando finalice su shell.
fuente
screen
La pregunta se planteó después del inicio de sesión, cómo mantener los procesos en ejecución, ahora después de iniciar sesión pero antes de iniciarlos. Gran respuesta Jorge, ¡realmente me has ayudado! :)bg
(sin%1
) suele ser suficiente, ya que el trabajo predeterminado es el trabajo actualPara un script de shell único que he estado ejecutando durante un largo período de tiempo, iniciaré sesión y ejecutaré el proceso en segundo plano usando '&'.
Ejemplo:
Me desconecté y desconecté mi sesión SSH. Cuando inicio sesión más tarde, el script todavía se está ejecutando, como lo demuestra la recopilación continua de datos del script.
fuente
&
si cierra la sesión y accede a su sesión SSH, el proceso seguirá ejecutándose, sin embargo, no podrá ver la salida de ese proceso (si su script hizo eco de algo no lo verá, pero si escribe un archivo, el archivo estará allí)Deberías revisar la pantalla GNU y ver si te ayuda. Dependiendo de cómo necesite que su aplicación se ejecute en tiempo real, puede causar más problemas de los que resuelve, pero al menos le permitirá reanudar su sesión como si nunca la abandonara.
Cómo utilizar :
screen
para el primer inicio, desplácese por los mensajes de introducción, debería recibir un terminal.screen -r
para reanudar esa sesión. Puede tener varias sesiones de pantalla separadas a la vez, en este caso se le mostrará una lista de sesiones disponibles.Hay muchas otras opciones, por ejemplo, pantallas divididas, y también todos los accesos directos son totalmente personalizables.
fuente
La respuesta más simple ...
Ctrl + Z suspenderá el programa en ejecución
"bg" lo ejecutará en segundo plano
fuente
disown
onohup
), esto generalmente no mantendrá el proceso en ejecución después del final de la sesión SSH.La forma más fácil es ejecutar su comando en segundo plano con
&
. Entonces solo escribe:fuente
Si bien todos dicen usar
disown
(la única opción que tiene después de que ya comenzó el proceso),nohup
o incluso ejecutar el comandoscreen
, lo cual es útil si desea ver toda la salida del comando ... Soy fanático descreen
.. Todavía he intentado las distribuciones mainstream más recientes de Linux y simplemente poner el trabajo en segundo plano y dejar de fumar no hace que todos los procesos que se están ejecutando mueran. Debe haber un entorno global o algo así. Estoy intentando esto en algunos sistemas bastante antiguos (slackware 12) y mi script de prueba sigue ejecutándose hasta que lo elimino manualmente:Aunque estoy de acuerdo que
screen
sería la mejor manera de manejar esto, aunque mi guión escribió a archivos o lo que sea .. nunca he necesitado utilizar ingresedisown -a
onohup
menos que estaba fuera de la paranoia completa. ¿Quizás alguien pueda arrojar algo de luz sobre cómo se comporta bash por defecto? ¿Quizás algunos administradores del sistema cambien los valores predeterminados en los shells grandes para evitar que los procesos de sus usuarios sobrecarguen el sistema?fuente
Desafortunadamente, una sesión SSH terminada puede provocar que tmux o la pantalla se apaguen. Esto se debe a
systemd
que finalizará cualquier proceso secundario al cerrar sesión en una sesión.Puede cambiar esta configuración en su
logind.conf
(/etc/systemd/logind.conf
):Gracias por responder en https://unix.stackexchange.com/questions/490267 .
fuente
En vez de :
Añadir antes
nohup
:Luego, podrá ver la consola estándar mediante:
fuente