PuTTY u OTRO: siga ejecutando el comando incluso después de salir de PuTTY [duplicado]

13

Tengo un par de comandos que necesito ejecutar. Estos comandos deben ejecutarse continuamente incluso después de que salga de mi interfaz. Cuando tengo acceso a la GUI de Linux, ejecuto algo como:

cd /home/testuser/Scripts*
xterm -hold -T "Background_Script1" -e  "service1-start.sh" &
sleep 10
xterm -hold -T "Background_Script2" -e "service2-start.sh" &

Cualquier ayuda será muy apreciada.

usuario3331952
fuente
¿Hay alguna razón por la que no estás ejecutando estos servicios como demonios?
SevenSidedDie
¿Los comandos están destinados a ser servicios que deberían ejecutarse en un tiempo de actividad cercano al 100% "para siempre", o una tarea de procesamiento de larga duración que se espera que termine después de algún tiempo? Todas las respuestas "funcionarán" para ambos casos, pero la recomendación adecuada será diferente.
Peteris
¿Qué distribución específica de Linux estás usando? Descubrí que la ejecución set -m;hace que mis scripts continúen ejecutándose después de cerrar sesión en CentOS y RHEL.
ArtOfWarfare

Respuestas:

33

Tratar

nohup Background_ScriptX y

nohup asegura que un proceso no finaliza cuando se cierra un terminal. El símbolo & empuja el proceso a un segundo plano.

Espero que esto haya sido útil.

Eamonn Travers
fuente
nohup definitivamente hace el trabajo
Pitto
Me alegra ser de ayuda.
Eamonn Travers
15
La pantalla tiene una clara ventaja sobre nohup : nohup no le permite volver a un comando en ejecución (por ejemplo, a la mañana siguiente para leer su stdout, luego elegir matarlo, etc.). la pantalla le permite hacer exactamente eso.
Andreas F
1
nohup envía la salida a un archivo donde puede procesarse.
Brian Knoblauch
Para aquellos que son nuevos en nohup, básicamente es "sin colgar" - con nohup, la HUPseñal de colgar ( ) se ignora.
Dan7119
20

Si desea leer la salida en una fecha posterior, puede usar screen:

screen -d -m my_command

Esto le proporciona un terminal separado al que puede conectarse más tarde ( screen -r) para leer la salida stdout / stderr.

marca
fuente
2
+1. Por un lado, si cierra su terminal (por ejemplo, masilla) y luego lo abre de nuevo y lo vuelve a conectar a la pantalla ( screen -r), también tendrá toda la salida que produjo su programa y, de lo contrario, se habría "perdido". Además, la pantalla puede hacer muchas cosas increíbles, como pantallas divididas, etc. :)
Alberto Santini
6

Otra opción si el nohupcomando no está disponible es usar el comando disown .

Primero puede ver sus tareas en segundo plano ejecutando jobsen la terminal. Puede obtener el número de trabajo desde allí.

Ahora solo ejecute disown %[job number]y el proceso se desconectará de la terminal actual y permanecerá vivo cuando cierre la sesión.

Nota al margen: asegúrese de hacer la pregunta correcta. Si está ejecutando servicios reales como insinúa en su muestra, es posible que desee ver cómo crear un demonio en el sistema operativo que elija. Esto es para asegurarse de que el proceso aún se ejecuta después de un reinicio y hacerlo más consistente con otros servicios.

Espero que esto ayude.

usuario391035
fuente
3

Como screense ha mencionado: existen otros multiplexores de terminales por ahí. Me gusta tmuxmucho, vea, por ejemplo, esta otra pregunta de superusuario, tmux vs screen para una comparación.

1k5
fuente
0

También puede probar: setsid Setsid también funciona con programas en segundo plano y les permite seguir ejecutándose después de que se desconecta la sesión de terminal / ssh.

Úselo así:

setsid program-to-background

Página de manual: http://man7.org/linux/man-pages/man2/setsid.2.html

nulldev
fuente