
Digamos que en una conexión PuTTY empiezo
mysqldump --host host1 --databases db1 db2 db3 | mysql
lo que crea dos procesos: mysqldump
con PID 5800 y mysql
con PID 5801. ¿Es posible dejar que los procesos en ejecución continúen ejecutándose cuando quiero cerrar PuTTY y aún poder volver a ellos más tarde?
Encontré algunas respuestas por aquí que tratan sobre un solo proceso y cómo usarlo reptyr
para volver a generarlo screen
, pero mi preocupación es cómo lidiar con mis dos procesos que se ejecutan en paralelo.
Respuesta1
Deje en marcha su ocupada sesión.
Abra otra sesión nueva.
Úselo tmux
para que la aplicación persista incluso si cierra o pierde su conexión ssh. Es tmux
similar a screen
, posiblemente un poco mejor.
sudo apt install tmux
tmux
Ahora el paso crucial, robar la terminal de los procesos.
sudo apt install reptyr
ps uw # find one of the PIDs to save, any will do
reptyr -T the_PID
he notado unoefecto secundariodel reptyr -T
método. También captura su antiguo shell junto con las aplicaciones en ejecución. Si lo hace exit
ahora, volverá al shell original de tmux/screen. Úselo exit
nuevamente y volverá a su shell de inicio de sesión.
Respuesta2
¿Cómo lidiar con dos procesos que se ejecutan en paralelo?
Hay muchas respuestas posibles, usando o no herramientas screen
, tmux
o ejecutando tareas en segundo plano, usando archivos de registro separados...
Ejecutar dos procesos por separado
Podrías usarllamado fifo:
mkfifo $HOME/mysqlFifo
Luego corre en dos separados.Terminalconsola:
mysqldump --host host1 --databases db1 db2 db3 >$HOME/mysqlFifo
y en la segunda ventana:
mysql <$HOME/mysqlFifo
Entonces déjalo correr...
¿Quiero cerrar PuTTY y aún poder volver a ellos más tarde?
screen
también
Alguna preparación:
cat >$HOME/mysqlScreenRc <<eof
screen -t dump mysqldump --host host1 --databases db1 db2 db3 >$HOME/mysqlFifo
screen -t mysql mysql <$HOME/mysqlFifo
eof
mkfifo $HOME/mysqlFifo
entonces
screen -S mysql -c $HOME/mysqlScreenRc
o
screen -dmS mysql -c $HOME/mysqlScreenRc
para dejarlo ejecutar en segundo plano...
Luego para conectarse y mirar:
screen -r mysql
Para garantizar que la pantalla permanezca abierta después de finalizar los comandos, puede usar read
el comando:
cat >$HOME/mysqlScreenRc <<eof
screen -t dump sh -c 'mysqldump --host host1 --databases db1 db2 db3 >$HOME/mysqlFifo;read foo'
screen -t mysql sh -c 'mysql <$HOME/mysqlFifo;read foo'
eof
Pero podrías ejecutarlo en segundo plano con registros separados:
nohup mysqldump --host host1 --databases db1 db2 db3 2>/somepath/mysqldump.err |
mysql >/somepath/mysql.log 2>/somepath/mysql.err &
Entonces podrías cerrar esta consola y luego mirar los archivos en /somepath
...