🍩

[Linux]screenコマンドでSSH接続を切断しても、サーバーが停止しないようにする

2024/10/07に公開

この記事を書くにあたって

Next.jsで自作WEBアプリを作り公開する際にVSCodeでリモート接続してNext.jsのサーバーを起動したあと、リモート接続を切断するとNext.jsのサーバーも停止してしまいました。
リモート切断時にターミナルセッションが切断されることを初めて知り、この問題を回避するための方法を今後のメモ代わりとして残しておきたいと思ったので書き留めておきます。

前提

  • 今回はscreen コマンドを使って、仮想端末でセッションを残しておく方法で実現します。
  • Next.jsの起動を例にして試します。

screenインストール

sudo apt updat
sudo apt install screen

screenを実際に使用してみる

新しいscreenセッションを作成

下記コマンドで新しいscreenセッションを作成します。
※実行後、新しいターミナル画面に切り替わります

  screen -S nextjs

Next.jsサーバーを起動する

下記コマンドでNext.jsサーバーを起動する

  npm run start

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

Ctrl + Aを押した後、Dを押します。これでセッションがバックグラウンドに移動します。

ubuntu@ip-10-0-1-59:~/XXXXXXXXXX$ npm run start

> work-experience-frontend@0.1.0 start
> next start -H 0.0.0.0 -p 3000

  ▲ Next.js 14.2.11
  - Local:        http://localhost:3000
  - Network:      http://0.0.0.0:3000

 ✓ Starting...
 ✓ Ready in 851ms

//Next起動中に、Ctrl + Aを押した後、Dを押します。

すると、screenセッションを作成前の画面に戻ります。

ubuntu@ip-10-0-1-59:~/XXXXXXXXXX$ screen -r nextjs
[detached from 9496.nextjs]

この状態でリモート接続を切断してもNextのセッションは生きている。

デタッチ後、再度screenセッションに再接続するには

screen -r nextjs

screenセッションを終了

現在のscreenセッション確認

screen -ls

これにより、アクティブなscreenセッションのリストが表示されます。

There is a screen on:
    12345.nextjs (Detached)

screenセッションを終了

セッションを終了したいときには、セッションに再接続して、exitコマンドを入力するか、Ctrl + Dを押します。

Discussion