SSH経由でリモートで別のシステムにアクセスしているとしましょう。終了してからSSHセッションを終了するのに長い時間がかかるコマンドを実行したいが、リモートシステムに接続していなくてもコマンドを実行したままにしておきます。どうやってそれをしますか?ご存知かもしれませんが、SSHを終了すると、実行中のすべてのジョブが終了します。最初から仕事を始めますか?あなたはする必要はありません。ここでは、sshセッションからログアウトした後もコマンドを実行し続けるための4つの方法を示しました。続きを読む。
LinuxでSSHセッションからログアウトした後もコマンドを実行し続ける
これを行うには多くの方法があります。ただし、次の方法は簡単で簡単だと思います。
方法1-画面の使用
画面 ツールは、VT100 / ANSIターミナルエミュレーションを備えたフルスクリーンウィンドウマネージャーであり、リモートジョブを終了せずにSSHセッションから安全に切り離すことができます。複数のリモートサーバーを使用している場合に役立ちます。 Screenコマンドは、ほとんどのLinuxオペレーティングシステムにプリインストールされています。万が一、インストールされていない場合は、ディストリビューションのパッケージマネージャーを使用してインストールできます。
Arch Linuxおよびその派生物について:
$ sudo pacman -S screen
RHEL、CentOS、およびその他のRPMベースのシステムの場合:
$ sudo yum install screen
Debian、Ubuntu、その他のDEBベースのシステムの場合:
$ sudo apt-get install screen
SUSE / OpenSUSEの場合:
$ sudo zypper install screen
リモートシステムにscreenをインストールした後、screenセッションを開始します。
$ screen
スクリーンセッションが開始されました。次に、リモートシステムで実行したいジョブまたはタスクを実行します。
Ubuntu 16.04イメージをダウンロードします:
$ wget http://mirror.waia.asn.au/ubuntu-releases/xenial/ubuntu-16.04.2-desktop-amd64.iso
Ubuntu16.04ISOのサイズは約1.5GBです。通常のブロードバンド接続では、ダウンロードに1時間近くかかります。そんなに長く待つ必要はありません。ダウンロードプロセスをリモートシステムで実行したままにし、「Ctrl-A」を押して画面セッションを終了します。 続いて「d」 。以下のような出力が表示されます。
[detached from 1365.pts-0.server]
スクリーンセッションから切り離した後、リモートシステムからログアウトできます。リモートジョブはサーバーで実行され続けます。
次のコマンドを使用して、いつでも画面セッションに再接続できます:
$ screen -r
プロセスがまだそこで実行されていることがわかります。
複数の画面セッションがある場合は、画面セッションIDを入力して再接続する必要があります。スクリーンセッションの数を表示するには、次を実行します:
$ screen -ls
サンプル出力は次のようになります:
There are screens on:There are screens on: 1382.pts-0.server (Saturday 15 July 2017 04:39:51 IST) (Detached) 1365.pts-0.server (Saturday 15 July 2017 04:38:44 IST) (Detached) 2 Sockets in /var/run/screen/S-sk.
次に、目的の画面セッションに再度接続します。たとえば、 1382 、実行:
$ screen -r 1382
詳細については、manページを参照してください。
$ man screen推奨ダウンロード -無料のチートシート:「Linuxコマンドラインチートシート」
方法2-tmuxを使用する
tmux は、単一の画面から多数の端末を作成、アクセス、および制御できるようにする端末多重化装置です。 tmuxセッションを画面から切り離してバックグラウンドで実行し続け、後で再接続することができます。 Screenツールと同様に、tmuxを使用して、リモートジョブを終了せずにSSHセッションからデタッチすることもできます。 Tmuxコマンドは、ほとんどのLinuxオペレーティングシステムにプリインストールされています。万が一、インストールされていない場合は、ディストリビューションのパッケージマネージャーを使用してインストールできます。
Arch Linuxおよびその派生物について:
$ sudo pacman -S tmux
RHEL、CentOS、およびその他のRPMベースのシステムの場合:
$ sudo yum install tmux
Debian、Ubuntu、その他のDEBベースのシステムの場合:
$ sudo apt-get install tmux
SUSE / OpenSUSEの場合:
$ sudo zypper install tmux
tmuxをインストールした後、次のコマンドを使用してtmuxセッションを開始します:
$ tmux
次に、タスクまたはジョブを開始します。次に、 "CTRL-b" を押して、リモートジョブを終了せずにtmuxセッションから安全にデタッチします。 続いて"d" 。これにより、tmuxセッションが切り離されますが、そのセッションで実行しているのはバックグラウンドで実行されたままになります。つまり、セッションから切断されている場合でも、すべてのリモートが実行されます。
利用可能なセッションを一覧表示するには、次を実行します:
$ tmux ls 0: 1 windows (created Sat Jul 15 16:51:35 2017) [134x33] 1: 1 windows (created Sat Jul 15 16:53:58 2017) [134x33]
以下に示すように、それぞれのセッションIDを使用してtmuxセッションに再接続できます。
$ tmux attach -t 0
詳細については、manページを参照してください。
$ man tmux
方法3-Reptyrを使用する
そもそもscreen/tmuxでコマンドを開始するのを忘れた場合はどうなりますか?心配ない。ここがレプティルです 助けになります。 Reptyrは、実行中のプロセスをpty間で移動するのに役立ちます。 Reptyrに関する詳細なガイドはすでに公開されています。次のリンクを確認してください。
- Reptyr –実行中のプロセスを閉じずに1つのターミナルから別のターミナルに移動します
方法4-nohupを使用する
nohup 、いいえの略です h ang up は、SSHセッションから切断された後でもLinuxコマンドを実行するのに役立つもう1つのコマンドラインユーティリティです。これはGNUcoreutilsの一部であるため、インストールする必要はありません。すべてのLinuxディストリビューションにプリインストールされています。
使い方は絶対に簡単です。リモートシステムにログインした後、あなたがしなければならないのは:
$ nohup <command> &
はい、それはとても簡単です。
例:
$ nohup wget http://mirror.waia.asn.au/ubuntu-releases/xenial/ubuntu-16.04.2-desktop-amd64.iso &
これで、SSHセッションを終了できます。リモートジョブは実行を継続します。
リモートシステムにログインし、以下を実行して、実行中のジョブのリストを表示します。
$ jobs -l [1]+ 1421 Running nohup wget http://mirror.waia.asn.au/ubuntu-releases/xenial/ubuntu-16.04.2-desktop-amd64.iso &
デフォルトでは、出力は「nohup.out」に追加されます。もちろん、出力ファイルを変更することもできます。
別の例を示します。
$ nohup find -size +10M > log.txt &
上記のコマンドは、サイズが10Mを超えるファイルを検索し、出力をlog.txtファイルに書き込みます。
詳細については、manページを参照してください。
$ man nohup
そして、それは今のところすべてです。何か気になっていますか?下記のコメント欄でお気軽にお知らせください。来るより良いもの。引き続きアクセスしてください!
乾杯!