
Nehmen wir an, ich starte in einer PuTTY-Verbindung
mysqldump --host host1 --databases db1 db2 db3 | mysql
Dadurch werden zwei Prozesse erstellt: mysqldump
mit PID 5800 und mysql
mit PID 5801. Ist es möglich, die laufenden Prozesse weiter auszuführen, wenn ich PuTTY schließen möchte, und trotzdem später auf sie zurückgreifen zu können?
Ich habe hier einige Antworten gefunden, die sich mit einem einzelnen Prozess und seiner Neuzuordnung befassen reptyr
, screen
aber meine Sorge ist, wie ich mit meinen beiden parallel laufenden Prozessen umgehen soll.
Antwort1
Lassen Sie Ihre aktive Sitzung laufen.
Öffnen Sie eine weitere neue Sitzung.
Verwenden Sie tmux
dies, damit die App bestehen bleibt, auch wenn Sie Ihre SSH-Verbindung schließen oder verlieren. Dies tmux
ist ähnlich wie screen
und möglicherweise etwas besser.
sudo apt install tmux
tmux
Nun der entscheidende Schritt: das Terminal der Prozesse stehlen.
sudo apt install reptyr
ps uw # find one of the PIDs to save, any will do
reptyr -T the_PID
Mir ist eins aufgefallenNebenwirkungder reptyr -T
Methode. Sie fangen auch Ihre alte Shell zusammen mit den laufenden Apps. Wenn Sie exit
jetzt, kehren Sie zur ursprünglichen Shell von tmux/screen zurück. Verwenden Sie es exit
erneut und Sie sind wieder bei Ihrer Login-Shell.
Antwort2
Wie gehe ich mit zwei parallel laufenden Prozessen um?
Es gibt viele mögliche Antworten: Verwendung oder Nichtverwendung screen
, tmux
Tools, Ausführung als Hintergrundtasks, Verwendung separater Protokolldateien …
Zwei Prozesse getrennt ausführen
Du könntest benutzenmit dem Namen FIFO:
mkfifo $HOME/mysqlFifo
Dann laufen Sie in zwei getrenntenTerminalKonsole:
mysqldump --host host1 --databases db1 db2 db3 >$HOME/mysqlFifo
und im zweiten Fenster:
mysql <$HOME/mysqlFifo
Dann lass es laufen...
Ich möchte PuTTY schließen und später trotzdem darauf zurückkommen können?
screen
zu
Einige Vorbereitungen:
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
Dann
screen -S mysql -c $HOME/mysqlScreenRc
oder
screen -dmS mysql -c $HOME/mysqlScreenRc
um es im Hintergrund laufen zu lassen ...
Dann verbinden und ansehen:
screen -r mysql
Um sicherzustellen, dass der Bildschirm nach Beendigung der Befehle geöffnet bleibt, können Sie read
den folgenden Befehl verwenden:
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
Sie können es aber auch einfach im Hintergrund mit getrennten Protokollen ausführen:
nohup mysqldump --host host1 --databases db1 db2 db3 2>/somepath/mysqldump.err |
mysql >/somepath/mysql.log 2>/somepath/mysql.err &
Sie können also diese Konsole schließen und dann nach Dateien in /somepath
... Ausschau halten.