ウィンドウを閉じてもプログラムを動かし続ける (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・バニラ)にも載っています。