本文へスキップ
← ガイド一覧

ウィンドウを閉じてもプログラムを動かし続ける (screen・tmux)

SSHのウィンドウを閉じると、その中で実行したプログラムも一緒に終了します。screenやtmuxはサーバー内に「仮想ウィンドウ」を作り、SSH接続を切ってもプログラムが動き続けるようにしてくれます。どちらか一方だけ覚えれば十分です。

DiscordボットやWebアプリのように、常に起動している必要があり、サーバーが再起動しても自動で再び起動する必要があるプログラムには、pm2やsystemdのほうが適しています。(Discordボットを24時間ホスティングする (discord.js・discord.py)、自分で作ったWebアプリをサーバーにデプロイする)screen・tmuxは、コンソールに直接コマンドを入力する必要があるゲームサーバーや、時間のかかる作業に向いています。

screen

sudo apt install -y screen
screen -S work          # 'work'という名前のウィンドウを作って入ります

このウィンドウの中で、目的のプログラムを実行します。

やりたいこと方法
プログラムを動かしたまま抜けるCtrl + Aを押してからD
再び入るscreen -r work
作成済みのウィンドウの一覧screen -ls
ウィンドウを完全に閉じるウィンドウの中でexit
上にスクロールCtrl + Aを押してからEsc、矢印キーで移動、Escで終了

screen -rを実行しても(Attached)と表示されて入れない場合は、前のSSH接続がまだつかんだままになっています。screen -d -r workで入ってください。

tmux

sudo apt install -y tmux
tmux new -s work
やりたいこと方法
プログラムを動かしたまま抜けるCtrl + Bを押してからD
再び入るtmux attach -t work
作成済みのウィンドウの一覧tmux ls
ウィンドウを完全に閉じるウィンドウの中でexit
上にスクロールCtrl + Bを押してから[、矢印キーで移動、qで終了

注意点

  • 抜けるときにCtrl + Cを押すと、プログラムが終了します。 必ずCtrl + A, D(screen)またはCtrl + B, D(tmux)で抜けてください。
  • サーバーが再起動すると、screen・tmuxの中のプログラムはすべて終了します。再起動後も自動で起動するようにしたい場合は、cronの@rebootやpm2・systemdを使ってください。
  • マインクラフトサーバーをscreenで動かす方法は、マインクラフトサーバーを作る (Java版、Paper・バニラ)にも載っています。

解決しない問題がある場合は、Discordのチケットでお問い合わせください。