GNU/Linux >> Linux の 問題 >  >> Linux

Reptyr –実行中のプロセスを閉じずに1つのターミナルから別のターミナルに移動する

たとえば、ローカルシステムからSSHセッションを介してリモートサーバーでプロセスを実行しているとします。リモートジョブが完了するまでに長い時間がかかることをあなたは知りませんでした。実行中のジョブをリモートサーバー自体に残し、リモートジョブを終了せずにSSHセッションを閉じて、後でまたは翌日にSSHセッションに再接続するだけです。もちろん、 screen / tmuxでジョブを開始できます セッションを終了し、リモートジョブを終了せずに画面セッションから切り離し、SSHセッションを終了します。ただし、最初に画面セッションを開始するのを忘れた場合、後で実行中のプロセスに再接続する方法はありません。 SSHセッションを閉じると、実行中のプロセスもリモートシステムで閉じられます。それで、あなたはそのような場合に何をしますか?問題ない。ここがレプティルです コマンドが役立ちます。

レプティル は、実行中のプロセスをpty間で移動するためのコマンドラインツールです。ローカルデスクトップまたはラップトップからSSHセッションを介してリモートシステムで完了するのに長い時間がかかるプロセスを開始し、SSHセッションを閉じて帰宅し、翌日に実行中のプロセスを再接続するだけです。また、長時間実行されているプロセスを、あるターミナルから別のターミナルに、終了せずに即座に簡単に移行/移動できます。便利に聞こえますか?もちろんです!

ダウンロード -無料の電子書籍:「システム管理者向けの6つの便利なLinuxコマンドラインツール」

この簡単なチュートリアルでは、Reptyrコマンドを使用して実行中のプロセスを新しい端末に移動する方法について説明します。

リモートシステムにReptyrをインストールする

注: リモートシステムにはtmuxが必要です または画面 実行中のプロセスを移動するためにインストールされました。

Arch Linuxとその派生物で、以下を実行します:

$ sudo pacman -S reptyr

DEBベースのシステムでは、次のコマンドを実行してReptyrをインストールします。

$ sudo apt-get install reptyr

screenまたはtmuxをインストールするには、次のコマンドを実行します:

$ sudo apt-get install tmux screen

RHEL / CentOS / Scieintific Linux / Fedoraでは、リポジトリでreptyrを使用できません。したがって、以下に示すようにコンパイルしてインストールできます。

次の前提条件をインストールします:

$ sudo yum install git tmux screen
$ sudo yum groupinstall 'development tools'

rootユーザーとしてコマンドを使用してクローンレプティルリポジトリをGitします:

$ git clone https://github.com/nelhage/reptyr.git

reptyrディレクトリに移動します:

$ cd reptyr/

次のコマンドを実行して、コンパイルしてインストールします。

$ make
$ sudo make install

CentOS 7 64ビットサーバーエディションのソースからReptyrをコンパイルしてインストールしましたが、上記のようにかなりうまく機能しました。

Reptyrを使用して、実行中のプロセスを閉じずに、ある端末から別の端末に移動する

通常、以下に示すように、SSH経由で任意のローカルシステムからリモートサーバーに接続します。

# ssh [email protected]_Of_remote_system

リモートシステムに接続した後、長時間実行されるプロセスを開始します。たとえば、 wgetを使用してUbuntu16.04デスクトップISOをダウンロードします。 コマンド。

# wget http://cdimage.ubuntu.com/daily-live/current/xenial-desktop-amd64.iso

出力例:

上のスクリーンショットにあるように、ダウンロードの合計サイズは1.5 GBで、完了するまでに90分以上かかります。

これ以上待ちたくないし、リモートジョブも終了したくない。

では、画面を開始します。 またはtmux 新しいターミナルでのセッションでは、 reptyrを使用します 画面またはtmuxセッション内で実行中のプロセスを取得するユーティリティ。最後に、両方のsshセッションを終了し、実行中のプロセスにいつでも再接続します。

新しいターミナルウィンドウまたは新しいタブを開き、 screenと入力して画面またはtmuxセッションを開始します。 またはtmux ターミナルで:

# screen

または

# tmux

上のスクリーンショットにあるように、スクリーンセッションが開始され、実行されています。

次に、次のコマンドを使用して、新しいターミナルから実行中のプロセスを見つけましょう。

# ps -a

出力例:

 PID TTY TIME CMD
 2320 pts/0 00:00:11 wget
 2343 pts/1 00:00:00 screen
 2358 pts/2 00:00:00 ps

wgetのPIDを書き留めます 処理し、コマンドを使用して実行中のプロセスを画面セッション内にアタッチします:

# reptyr 2320

完了です。上のスクリーンショットにあるように、wgetプロセスは古いターミナルから新しいターミナルウィンドウ(スクリーンセッションで実行されているウィンドウ)に移動(移行)されています。

実行中のプロセスを元のターミナルから移動すると、すぐに閉じられ、新しいターミナルで中断したところから続行します。

これで、端末を安全に切り離したり閉じたりでき、リモートサーバーでジョブが引き続き実行されます。

画面またはtmuxセッションから切り離すには、 CTRL + A + Dを押します。 。

画面セッションから切断すると、次のメッセージが表示されます。

[detached from 2344.pts-1.server1]

実行中のプロセスを再接続するには、リモートシステムにSSHで接続します:

# ssh [email protected]

ここにあります。 192.168.1.150は私のリモートサーバーのIPアドレスです。

スクリーンセッションを使用する場合は、次を実行します。

# screen -Dr

tmuxセッションの場合、次を実行します:

# tmux attach

Voila!実行中のプロセスが再度アタッチされ、プロセスがまだ実行中であることがわかります。

上のスクリーンショットにあるように、wgetジョブは中断または終了されておらず、引き続き実行されています。リモートシステムが稼働している限り、実行を継続します。

概要

要約すると、Reptyrは、あらゆるレベルのLinuxシステム管理者にとって非常に重要で便利なツールです。完了するのに非常に長い時間がかかったプロセスにうんざりしている場合は、Reptyrが間違いなく役立ちます。新しいターミナルウィンドウを開き、リモートサーバーにSSHで接続し、実行中のプロセスIDを見つけて、画面またはtmuxセッション内に安全に移動し、SSHセッションを終了します。詳細については、このチュートリアルの最後に添付されているリンクを参照してください。

推奨される読み物:

  • SSH経由でログインするときにリモートシステムでTmuxセッションを自動開始する
  • LinuxでProcsを使用してプロセス情報を表示する方法
  • Tmate-ターミナルをどこからでも誰とでも即座に共有
  • Linuxコンソールのフォントの種類とサイズを変更する方法
  • Linuxで仮想コンソールセッションをロックする方法
  • Linuxでファンクションキーを使用せずにTTYを切り替える方法

今のところこれですべてです。それでは、この便利なツールをご紹介します。試してみてください。失望することはありません。

参照リンク:

  • Reptyr GitHub
  • レプティルガイド

Linux
  1. 別のBashセッションで実行中のプロセスの出力を表示する方法は?

  2. あるマシンから別のマシンに設定をコピーする方法は?

  3. メールアカウントをあるcPanelサーバーから別のサーバーに移動する

  1. CentOS / RHEL :ボリューム グループをあるシステムから別のシステムに移動する方法

  2. すべてのファイルをあるディレクトリから別のディレクトリに移動 (および上書き) する方法は?

  3. Linuxで100万枚の画像をあるディレクトリから別のディレクトリに移動する最速の方法は何ですか?

  1. すべてのファイル(非表示を含む)をあるディレクトリから別のディレクトリに移動するにはどうすればよいですか?

  2. 実行中のプロセスを強制終了せずに ssh セッションを切り離すには?

  3. あるボリューム グループから別のボリューム グループに論理ボリュームを移動する