
PuTTY接続で開始するとします
mysqldump --host host1 --databases db1 db2 db3 | mysql
mysqldump
これにより、 PID 5800 とPID 5801 の2 つのプロセスが作成されます。PuTTYmysql
を閉じて後で戻れるようにしたいときに、実行中のプロセスの実行を継続させることは可能ですか?
ここで、単一のプロセスを扱い、 を使用してreptyr
それを に再親化する方法についての回答をいくつか見つけましたscreen
が、私の懸念は、並行して実行される 2 つのプロセスをどのように処理するかということです。
答え1
ビジーセッションを実行したままにしておきます。
別の新しいセッションを開きます。
を使用するtmux
と、ssh 接続を閉じたり失ったりしてもアプリが存続します。tmux
は に似ていますがscreen
、おそらく少し優れています。
sudo apt install tmux
tmux
さて、重要なステップは、プロセスの端末を盗むことです。
sudo apt install reptyr
ps uw # find one of the PIDs to save, any will do
reptyr -T the_PID
一つ気づいたことがある副作用メソッドのreptyr -T
。実行中のアプリとともに古いシェルもキャッチします。これでexit
、tmux/screen の元のシェルに戻ります。exit
もう一度使用すると、ログイン シェルに戻ります。
答え2
並行して実行される 2 つのプロセスをどのように処理しますか?
screen
使用するかどうか、tmux
ツールを使用するか、バックグラウンド タスクとして実行するか、分離されたログ ファイルを使用するかなど、考えられる答えはたくさんあります...
2つのプロセスを別々に実行する
使用できる名前付き fifo:
mkfifo $HOME/mysqlFifo
次に2回に分けて実行するターミナルコンソール:
mysqldump --host host1 --databases db1 db2 db3 >$HOME/mysqlFifo
2番目のウィンドウでは:
mysql <$HOME/mysqlFifo
それでは実行してみましょう...
PuTTY を閉じても、後で元に戻れるようにしたいのですが。
screen
あまりにも
準備:
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
それから
screen -S mysql -c $HOME/mysqlScreenRc
または
screen -dmS mysql -c $HOME/mysqlScreenRc
バックグラウンドで実行できるようにします...
接続して視聴するには:
screen -r mysql
コマンドが終了した後も画面が開いたままになるようにするには、次のコマンドを使用できますread
。
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
ただし、ログを分離してバックグラウンドで実行することもできます。
nohup mysqldump --host host1 --databases db1 db2 db3 2>/somepath/mysqldump.err |
mysql >/somepath/mysql.log 2>/somepath/mysql.err &
したがって、このコンソールを閉じて、次のファイルについて監視することができます/somepath
...