linux

【Linux】sshが切断しても処理を継続させる方法【結論:screenを使う】

9月 30, 2019

How to continue way of ssh connection on Linux
プログラム学生
ターミナルで作業をしてた時、突然、SSH接続が切れてしまって作業が台無しになったのですが、途中で接続が切れても作業を継続する方法ってありますか?
作業前に、「screen」というコマンドを使えば解決すると思うから、それを説明するね。
Tommy

この記事で分かること

  • リモート切断しても処理を継続させる方法が分かる
  • 「screen」の使い方が分かる

Linuxのsshが切断しても処理を継続させる方法の概要

summary of continue way of ssh connection

この記事では、sshでのターミナル作業中、ネットワークが切れた場合に、実施していた作業を継続させる方法を説明します。

昨今、レンタルサーバーの多くは、Linuxサーバーですが、もしこれを読んでくれているあなたが、ブログ運営などでレンタルサーバーを借りている場合、Linuxの仕組み仕組みを知ると、エンジニアとしての一歩を踏み出せるかもしれません。

Linuxの仕組みを知る上で、下記linux初心者向けの記事が参考になります。こちらも合わせて読んでください。

オススメ
how to operate file on linux
【linux】ファイル操作とディレクトリ構成【→初心者向け】

続きを見る

ところで、皆さんは、ターミナル作業の作業でセッションが切れて焦った経験はありませんか?

以前は私も「リモートで作業」そのような環境に悩まされていました。特にセブ島はインターネット環境が、比較的悪いと言われていて、時々インターネット回線が切断されることがあります。

この「リモート作業」でどのようなことを実施するか?については、下記の記事で紹介していますので、こちらの記事も合わせて読んでください。

オススメ
how to programming on rental server
レンタルサーバでプログラミングする方法【→ブログのサーバでできる!】

続きを見る

このように、ネットワークが不安定で、途中で止まってしまうような環境では、作業がとまってしまい、長時間かかるコマンド処理の結果が得られず、なかなか作業が進まない為、ターミナルを使ったリモート作業中のエンジニアにとっては、死活問題になります。

こんな時にこの「screen」コマンドを使うと、サーバとクライアントPCのターミナルによるセッションが切れても、後からそのセッションにアタッチすることができます。これによって以前は諦めていたセッション断による作業を継続することができるようになります。

Linuxのsshが切断しても処理を継続させる方法の詳細

detail of continuing way of ssh connection

screenセッションを起動する

$ screen

「screen」コマンドを実行する。

現在のscreenセッション一覧を確認する

screenコマンドのオプション「ls」を使って、現在のscreenセッションを一覧を確認する。

下記の例では、ID:10000番の「XXXXX」という名前のセッションがデタッチ状態であります という意味になります。

※この「XXXXX」は実際には具体的な数字になります。

$ screen -ls
There is a screen on:
        10000.pts-1.XXXXX   (Detached)
        1 Socket in /var/run/screen/S-XXXX.

「screen」コマンドを「ls」オプションで実行する。

screenセッションにアタッチする

複数のセッションがある場合は、「screen -ls」で調べたIDを指定してセッションにアタッチすることができます。

$ screen -r

「screen」コマンドを「r」オプションで実行する。

screenセッションをデタッチする

screenコマンドのオプション「d」を使って、現在のscreenセッションをデタッチする。

$ screen -d

「screen」コマンドを「d」オプションで実行する。

screenセッションに名前を付ける

screenコマンドのオプション「S」を使って、名前付きのセッションを起動する。

※ここではscreenセッションに、「hogehoge」という名前をつけた例を書きます。

$screen -S hogehoge

「screen」コマンドを「S」オプションの引数に「hogehoge」を指定して実行する。

screenで他のユーザーにセッションを共有する

「screen」コマンドの「SUID」を設定する

screenコマンド「/usr/bin/screen」のSUIDを「setuid root」に設定する。

$chmod u+s /usr/bin/screen

「chmod」コマンドを「u+s」オプションの引数に「/usr/bin/screen」を指定して実行する。

「screen」コマンドのアクセス権を設定する

screenの実行ファイル「/var/run/screen」のパーミッション(アクセス権)を「755」に設定する。

$chmod 755 /var/run/screen

「chmod」コマンドを「755」オプションの引数に「/var/run/screen」を指定して実行する。

「screen」セッションを開始する

セッション名を指定してscreenセッションを開始する。

※今回は、「hogehoge」という名前のセッションを開始します。

$screen -S hogehoge

「screen」コマンドを「S」オプションの引数に「hogehoge」を指定して実行する。

「screen」セッションを探す

「screen」コマンド実行中では以下の手順」で他の人にscreenセッションの共有を追加することができます。

  1. Ctrl+a で「:multiuser on」を入力して、マルチユーザーモードをonにする。
  2. Ctrl+a で「:acladd userB」を入力して、ユーザー”userB”をこのセッションの共有に追加する。

また、screenセッションを共有された人は次の手順で自分がセッションの共有が追加されたことを確認することができます。

  1. 「screen -ls userA/」と実行して、リストにセッション名が入っていることを確認する。
$screen -ls userA/

「screen」コマンドを「ls」オプションの引数に「userA」を指定して実行する。

「screen」セッションにアタッチする

「-xオプション」で「hogehoge」という名前のscreenセッションにアタッチする

$screen -x userA/hogehoge

「screen」コマンドを「x」オプションの引数に「userA/hogehoge」を指定して実行する。

-linux
-

© 2021 Tommy's blog Powered by AFFINGER5