切断後もSSHセッションを実行し続ける


208

私は時々、家に帰る前にキックオフしたいプロセスを長時間実行しているので、サーバーへのSSHセッションを作成してプロセスを開始しますが、ラップトップを閉じて家に帰り、後で夕食後に仕事を辞める前に始めたプロセスを確認してください。SSHでこれを行うにはどうすればよいですか?私の理解では、SSH接続を切断すると、サーバー上のログインセッションも切断されるため、長時間実行されているプロセスが終了します。

回答:


205

を使用nohupして、プロセスでハングアップ信号を無視します。

$ nohup long-running-process &
$ exit

20
これです。screenやtmuxをインストールする必要はありません。これは実際にそれを行う古き良き方法です。確かに「画面」または「tmux」はどちらも素晴らしいアプリであり、必要なときに使用する必要がありますが、ログアウトできるプロセスをバックグラウンドで実行するのと同じくらい簡単です。上記に進みます。
-reiche

2
nohupはdisownのようなものですか?
cjac

28
目的は似ていますが、多くの点で異なります。nohupSIGHUPをインターセプトして、実行したシェルが終了し、まだ実行中のすべての子にSIGHUPを送信したときにlong-running-process死なないようにします。disown指定されたジョブをBashの子リストから削除するだけなので、SIGHUPを送信しようとはしません。nohupはシェルとは別のプログラムなので、すべてのシェルで動作しますdisownが、Bashビルトインです。nohup実行するコマンドを受け入れますがdisown、ジョブが開始され、シェルに戻ることができるようにバックグラウンドになった後にのみ機能します。
ウォーレンヤング

3
nohupとdisownに不慣れな人のための素晴らしいクイックレビュー-ターミナルセッションに対処する簡単な方法 serverwatch.com/tutorials/article.php/3935306/…-
ダン

7
tail -f nohup.out戻ってきたときに何が起こっているかを確認する。
リカルドスチュヴェン

141

GNU Screenを使用します。すごいね!

ssh me@myserver.com
screen               #start a screen session
run-a-long-process

CTRL+ adスクリーンセッションからデタッチするには

exit                 #disconnect from the server, while run-a-long-process continues

ラップトップに戻ったら:

ssh me@myserver.com
screen -r            #resume the screen session

その後、長期実行プロセスの進捗を確認してください!

screenは非常に包括的なツールであり、私が説明した以上のことができます。スクリーンセッション中にctrl + aを試してください。いくつかの一般的なコマンドを学習します。おそらく最も一般的なものは次のとおりです。

  • CTRL+ ac新しいウィンドウを作成する
  • CTRL+ anスクリーンセッションの次のウィンドウに切り替えます
  • CTRL+ apスクリーンセッションの前のウィンドウに切り替える
  • さまざまなシステムからログインした場合、誤って別のコンピューターのアクティブな画面セッションに接続されたままになっている可能性があります。そのため、screen -d -r別のシェルがスクリーンセッションに接続されている場合、現在のシステムで再開する前に切り離されるように、常に再開します。

8
tmuxは、画面の最新のアナログです。
-zvolkov

モダンについては知りませんが、キーをbash / emacsすることに慣れている場合は、tmux(Ctrl + b)のデフォルトのキープレフィックスが役立ちます。
-sajith

2
何らかの理由で共有端末が必要な場合、画面はかなりクールです。画面screen -S nameを作成し、他の友人にで接続させますscreen -x name
パトリック

1
tmuxwith tmuxinatorは、凝った設定に最適な組み合わせですが、私screenは迅速でシンプルなソリューションとして好みます。
earthmeLon 14年

この答えは最高です。私はそれが好きです。優れた研究
ジャファーウィルソン

42

事前に計画してセットアップしていない場合screenなどは、次のようにします。

  1. プロセスがバックグラウンドで実行されている場合:goto#3、そうでない場合:Ctrl-Zフォアグラウンドプロセスを中断します。これにより、たとえば、中断されたプロセスのジョブ番号が報告されます。

    [1]+  Stopped                 processName
    
  2. processNameバックグラウンドに送信しますbg %1(ジョブ番号がに続いているものを使用%)。これはprocessNameバックグラウンドで再開します。

  3. またはで否認processNameします。現在のシェルを終了するまで所有権を維持する場合は、フラグを使用します。disown %1disown PID-h


5
これをありがとう!私は仕事をしていましたが、&私はそれを始めたときに使用していなかったので、私はそれを続けることができないと思っていました。これはうまくいくようです!
マット

4
これは素晴らしいです!Linuxがこのようなアクティブなプロセスの制御を転送できるとは知らなかった。長時間実行されているプロセスの途中でサーバーにSSHで接続しているときに、バッテリーが消耗するのではないかと心配しました。これが私にとっての答えでした。
プルート

14

使用したいのは、screenまたはさらに良いのはbyobuと呼ばれる画面のユーザーフレンドリーなラッパーです。

画面を使用すると、同じsshセッションで複数の仮想端末セッションを実行できます。チュートリアルヘルプページが用意されています。

byobuは、ctrl-aのキーの組み合わせではなく、単純なファンクションキーを使用して新しい画面を簡単に開くことができるラッパーです。また、名前を付けることができるすべての開いている仮想端末を含むステータス行も表示します。

もう1つの便利な機能は、ssh接続が切断されている間、すべての画面を表示できるという事実です。sshを介して再度接続し、byobuを呼び出すだけで、すべては以前と同じです。

最後に、by風のスクリーンショットをいくつか。


By風ターミナル内のサーバーで、それが何であるかを本当に知らずにプロセスを起動しました(これまで見たことがないので、ターミナルを検索してBy風をクリックしました)。By風の下部にカラフルなステータスバーがあり、かっこいいと思ったので、By風を使い続けました。今日、SSHを介してリモートでそのターミナルセッションにアクセスしたいと思った。私がしなければならなかったのは、「ビョブ」と入力するだけで、そのターミナルセッションがすぐに表示されました。本当に嬉しいよ
ニック

8

それは注目に値するかもしれません

ssh -t lala screen -rxU mooホストlalaのmooセッションにアタッチします

ssh -t lala screen -S mooホストlalaにmooセッションを作成します

そして

ssh -t lala screen -S moo quuxホストlalaでmooセッションを作成し、プログラムquuxを実行して、完了時にセッションを終了します。


3

古い質問、奇妙なまだtmuxに助言した人はいません。tmuxはn個のコンソールのラッパーとして機能し、必要になるまで開いたままにします。これにより、tmuxの多くの機能に加えて、より多くの制御が可能になります。簡単に管理できます。tmuxを実行するだけでシェルが起動し、ルーオンジョブを開始し、ctrl + bに続いてd(detach)を押します(ctrl+btmuxの「ok google」で、d閉じるコマンドです)シェルを終了せずに)。これは、たとえばパテを閉じるだけで実際に機能します。夕食後、再度接続すると、tmuxを再度開いて、tmux attach画面をそのまま表示できます。私が気に入っているのはペインを分割することです:ctrl+bを押し"ます。あるペインから別のペインに変更するにはctrl+b、上/下矢印を押します。


3

ここで良いガイドを見つけることができます: 切断したときにSSHセッションを実行し続ける

sudo apt-get install screen

これで、コマンドラインにscreenと入力するだけで、新しいスクリーンセッションを開始できます。画面に関する情報が表示されます。Enterキーを押すと、通常のプロンプトが表示されます。

切断する(ただし、セッションを実行したまま)には、 ヒットCtrl+ A当時とCtrl+ Dすぐに連続して。メッセージが表示されます[切り離されました]

すでに実行中のセッションに再接続するには

screen -r

既存のセッションに再接続するか、存在しない場合は新しいセッションを作成するには

screen -D -r

実行中の画面セッションの内部で新しいウィンドウを作成するには、 ヒットCtrl+ A、その後Cすぐに連続して。新しいプロンプトが表示されます。

別の画面ウィンドウから切り替えるに ヒットCtrl+ A、その後、Ctrl+ Aすぐに連続して。

オープン画面のウィンドウ一覧表示するには ヒットCtrl+ A、その後Wすぐに連続しての


<kbd>Ctrl</kbd>キーボードキーとして名前を表示するために使用できます。
トマス

1

NX NoMachineを使用していますが、これは私だけであるため無料です。基本的に、サーバー上でXセッションを実行し、何度も接続したり切断したりできます。Xセッションは、接続していないときに実行され続けます。どこからでも接続できます。フローティングウィンドウまたはデスクトップ全体を含む単一のウィンドウ(完全なGnomeデスクトップなど)を選択できます。クライアント(ラップトップで実行するクライアント)は、Linux、MacOS、Solaris、またはMicrosoft Windowsで実行できます。後者の場合、フローティングウィンドウを選択すると、Windowsタスクバーに個別に表示されます。

NX Nomachineを使用する2台のLinuxサーバーのフロントエンドとして、Windows XPラップトップ(特定のWindows固有のハードウェアに必要)を使用します。LinuxからWindowsラップトップに接続されているプリンターに印刷することもできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.