🍩
[Linux]screenコマンドでSSH接続を切断しても、サーバーが停止しないようにする
この記事を書くにあたって
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