
Digamos que em uma conexão PuTTY eu comece
mysqldump --host host1 --databases db1 db2 db3 | mysql
que cria dois processos: mysqldump
com PID 5800 e mysql
com PID 5801. É possível deixar os processos em execução continuarem a execução quando eu quiser fechar o PuTTY e ainda poder voltar a eles mais tarde?
Encontrei algumas respostas por aqui que tratam de um único processo e como usá- reptyr
lo para re-pai screen
, mas minha preocupação é como lidar com meus dois processos que rodam em paralelo.
Responder1
Deixe sua sessão ocupada em execução.
Abra outra nova sessão.
Use tmux
para que o aplicativo persista mesmo se você fechar ou perder sua conexão ssh. O tmux
é semelhante a screen
, sem dúvida um pouco melhor.
sudo apt install tmux
tmux
Agora o passo crucial, roubar o terminal dos processos.
sudo apt install reptyr
ps uw # find one of the PIDs to save, any will do
reptyr -T the_PID
eu notei umefeito colateraldo reptyr -T
método. Você também captura seu shell antigo junto com os aplicativos em execução. Se você exit
agora, retornará ao shell original do tmux/screen. Use exit
novamente e você estará de volta ao seu shell de login.
Responder2
como lidar com dois processos que rodam em paralelo?
Há muitas respostas possíveis, usando ou não ferramentas screen
, tmux
ou executando como tarefas em segundo plano, usando arquivos de log separados ...
Executando dois processos separadamente
Você poderia usarchamado fifo:
mkfifo $HOME/mysqlFifo
Em seguida, execute em dois separadosterminalconsole:
mysqldump --host host1 --databases db1 db2 db3 >$HOME/mysqlFifo
e na segunda janela:
mysql <$HOME/mysqlFifo
Então deixe correr...
Quero fechar o PuTTY e ainda poder voltar a eles mais tarde?
screen
também
Alguma preparação:
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
então
screen -S mysql -c $HOME/mysqlScreenRc
ou
screen -dmS mysql -c $HOME/mysqlScreenRc
para deixá-lo rodar em segundo plano ...
Então para conectar e assistir:
screen -r mysql
Para garantir que a tela permaneça aberta após o término dos comandos, você pode usar read
o 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
Mas você poderia simplesmente executar em segundo plano com logs separados:
nohup mysqldump --host host1 --databases db1 db2 db3 2>/somepath/mysqldump.err |
mysql >/somepath/mysql.log 2>/somepath/mysql.err &
Então você pode fechar este console e observar os arquivos em /somepath
...