ししちにじゅうはち 4x7=28

よんたったー https://twitter.com/keita44_f4

ssh越しのLinuxサーバー上でテラリアをscreenで動かし続ける話

背景

テラリアにはまっています.
休職してテラリアにはまるとは,アホな話です.
というわけで友人とテラリアを共に遊ぶために,Linuxサーバー上でテラリアを動かすことを思いついたわけです.
Linuxで動かす場合,monoを使ってTShock(非公式テラリアサーバー)を動かす選択肢があります.
特にver1.2系となると他非公式サーバーは対応してない現状.
そこでテラリアサーバーを動かすときのお話です.

自分が知ってる手法の問題点

さて手持ちのサーバーは共有で借りてる某VPS上のDebian
この上でテラリアを動かす場合,自分が知っている手法では問題がありました.

前提条件

レンタルサーバssh接続のみ
手元にサーバー無し

知ってる手法の問題点
  1. ターミナル起動(&やC-z・bgコマンド)
    • 手元にサーバーがあるならターミナルを起動させっぱなしにすれば良い.けどリモート上のサーバだとsshしたターミナルを起動しっぱなしにしなければならず,サーバーだけでなくクライアント側までも起動しっぱなしにしなければならず鯖を立ててるのに元もこうもない.
  1. ターミナルから切り離して起動する(標準入出力・エラー出力を/dev/null等にする)

screenを使った解決法

そこでscreenを使う!!
今までのscreenのイメージというと,「複数ターミナルを操れる,それローカルターミナルやEmacsでもできるよね」というイメージ.
でもその本質はまったく違っていて,すんごく便利だった.

デタッチ・アタッチの概念

screenのすごいところは複数シェルを起動しつつそれらが独立に動くところ.
つまりscreenで仮想起動したシェルはユーザログアウトしたあとも実行され続ける.
よってサーバー上で長時間計算・ゲーム等サーバーのプロセスを行うのに便利.
ちなみにそのときにscreenを離れてプロセスを実行し続けるのをデタッチ,離れたscreenを再度フロントに持ってくることをアタッチというようです.

  • 新しいスクリーンの起動
$ screen
  • screenのデタッチ(起動中のscreenを継続したままバックグラウンドにスタックする)
    • (プロセス中で)C-a C-d
  • デタッチしたscreenをアタッチする(デタッチscreenを再度フロントに持ってくる)
$ screen -r [screen id]

※C-aはEmacs等と干渉するため,設定で入れ替えることができます.

テラリアでの例
$ screen
$ mono TerarriaServer.exe
... C-a C-d
$ exit                  # ログアウトしてもテラリアは起動し続ける

まとめ

ssh越しでサーバのなにがしを動かす場合にscreenは便利.
でもローカルでscreen使うくらいなら,ターミナルやらEmacsやらでやりようがあるよね.

今後の課題

TShockの動作が重いので,サーバの動作を軽くする設定やらサーバの設定をしなければ…