さくらのVPSにspigotインストール(CentOS 7)

「さくらのVPS」+「CentOS 7」に「spigot」をインストール手順をまとめてあります。

spigotサーバについて

「spigot」とは「minecraft_server(マルチ)」に、色々なプラグイン(modみたいなもの)を追加できるようにしたサーバMODです。

「spigot」に追加できるプラグインには、「荒らし対策」「管理ツール」「ゲームルールの追加」等色々な種類がありますので、それを組み合わせることで自分好みの世界を構築することが出来ます。

公式のminecraftマルチサーバ(minecraft_server)では物足りなくなった方や、色々なプラグインをつかってサーバをより快適に管理、運用していきたい方などはこちらを使ってみるのも良いかもしれません。

インストール自体は非常に簡単なので、気軽に試してみましょう。

インストール作業の流れ

ざっくりと作業の流れを説明すると以下のようになります。

  • サーバの用意
  • OSインストール・設定
  • javaインストール
  • screenインストール
  • wgetインストール
  • gitインストール
  • spigot動作用ユーザ作成
  • spigotビルド
  • spigot設定(EULA同意)
  • 起動・停止スクリプト作成
  • 自動起動設定

バニラの「minecraft_server」インストールとの大きな違いは、「git」をインストールすることと、「spigot」の実行ファイルを自分でビルド(実行ファイルを作成)するぐらいです。

なぜわざわざビルドするのか?

サーバMODとして以前は「CraftBukkit」というのが有名でしたが、ライセンスの関係で揉めていてDMCA(デジタルミレニアム著作権法)を受けて公開停止となり、そのあおりで「spigot」も公開停止になっていたのですが、バージョン1.8からユーザがビルドするという形での配布が再開されました。

サーバの用意

インターネットに公開して、手っ取り早くみんなで遊べる環境を構築するために、今回は「さくらのVPS」と「CentOS 7」という組み合わせで「spigot」をインストールしていきます。

今回私が契約したプランはさくらのVPS 2Gのタイプです。

※さくらのVPSは途中でメモリの増強とかが出来ないので、事前に無料の試用期間で動作確認を行ってどのスペックのサーバ良いか確認してみてください。

サーバスペックについて

VPS上に「spigot」をインストールする場合には、メモリは2Gプラン以上をおすすめします。

導入するプラグインにもよりますが、それ以下のメモリでは動作が重かったりして快適に遊べない恐れがあります。

OSインストール・設定

OSインストール

VPSに「spigot」をインストールする場合は、メモリを節約するためにも「Minimal Install」(最小構成)でインストールし、GUI環境は入れないほうが良いでしょう。(普段の操作もSSHでのCUIがメインとなるはずです)

ちなみに、私は「Minmarl Install」の際にいつも開発環境だけは追加でインストールして、その他に必要なソフトがあれば、個別にインストールしています。

OSインストール時に追加でインストールしているソフト

  • Compatibility Libraries
  • Development Tools

さくらのVPSの場合

「さくらのVPS」に「CentOS 7」をインスト―ルした際の手順をこちらのページにまとめてあります。

OS設定

私が最低限行っている作業内容は下記の項目となります。

作業項目

  • セキュリティアップデート
  • SSHの設定 (rootのログイン禁止やポート番号変更など)
  • ファイアーウォール設定
  • SELinux無効化
  • 時刻同期設定

詳しい手順については、こちらのページにまとめてありますので、参考にしてみてください。

javaインストール

「spigot」を動作させるために必要な「java」を「yum」でインストールします。

# yum -y install java

インストールされたjavaのバージョンは下記のコマンドで確認できます。

# java -version
openjdk version "1.8.0_71"
OpenJDK Runtime Environment (build 1.8.0_71-b15)
OpenJDK 64-Bit Server VM (build 25.71-b15, mixed mode)

screenインストール

今回の「spigot」インストール手順では、「screen」を使って「spigot」を動作させるため「screen」をインストールします。

# yum install screen

wgetインストール

「Buildtools」をダウンロードするのに使う、「wget」をインストールします。

# yum install wget

gitインストール

「spigot」の実行ファイル作成(ビルド)は「Buildtools」を使って行うのですが、その際に必要となるため「git」をインストールします。

# yum install git

※ちなみに、実行ファイル作成は「BuildTools」が全部自動でやってくれるので、自分で「git」のコマンドを実際に入力することはありません。

spigot実行ユーザ作成

「spigot」を「root」ユーザで動作させるのはセキュリティ上好ましくないので、動作させるためのユーザを「adduser」コマンドで作成します。

この手順では「spiadmin」というユーザを作成していますが、特にユーザ名には決まりがないので、皆さんのお好きなユーザ名で作成してください。

# adduser spiadmin
# passwd spiadmin

※あまり簡単な名前のユーザを作成すると、SSHのブルートフォース攻撃の餌食になりますので、「admin」とか攻撃対象になりやすいユーザ名はやめましょう。セキュリティを考慮すると、SSHは鍵認証方式にすることをおすすめします。

Buildtoolsダウンロード

「spigot」をビルドするためのツールである「BuildTools」をダウンロードします。

インストールディレクトリ作成

まず、「Buildtools」をダウンロードする前に、「spigot」をインストールする(ビルドする)ためのディレクトリを作成しておきます。

今回の手順では「/opt/spigot」というディレクトリを作成し、そこに「spigot」をインストールしていきます。

# mkdir /opt/spigot

※ディレクトリを作成する場所は好きな場所で良いので、どこに作るかはパーティションの空き容量などをみて判断してください

所有者の変更

作成したディレクトリの所有者を、「spigot」を動作させるユーザに変更します。

今回の手順では「spiadmin」というユーザを作成しているので、「chown」コマンドでディレクトリの所有者を「spiadmin」ユーザに変更します。

# chown spiadmin:spiadmin /opt/spigot

※「spigot」を動作させるユーザを「spiadmin」以外にしている場合は適宜読み替えてください。

Buildtoolsダウンロード

ここからの作業は、「su」コマンドで「spiogt」実行ユーザへ変更して作業を行います。

# su - spiadmin

先ほど作成した「spigot」イントールディレクトリに移動し、そこで「Buildtools」をダウンロードします。

$ cd /opt/spigot

「wget」を使用して「Buildtools」をダウンロードをしてきます。

$ wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar

spigotビルド

ダウンロードしてきた「Buildtools」を使って「spigot」をビルドしていきます。

git設定

まず、事前準備としてgitの設定を行います。

$ git config --global --unset core.autocrlf

この設定は「git」で改行コードを設定しないようにするために行います。

spigotビルド実行

いよいよ「spigot」のビルドを行っていきますが、実行する時間や環境にもよりますが、この工程は結構時間かかります。(10~20分くらい)

$ java -jar BuildTools.jar

ビルドが完了すると、複数のファイルが作成されていますが、「spigot-x.x.x.jar」ファイルが「spigot」の実行ファイルとなります。

$ ls
apache-maven-3.2.5  BuildTools.log.txt  craftbukkit-1.9.jar  work
BuildData           Bukkit              Spigot
BuildTools.jar      CraftBukkit         spigot-1.9.jar

バージョンの指定方法

バージョンを指定してビルドしたい場合は「–rev バージョン」と指定することで、好きなバージョンのjarファイルを作成することが出来ます。

バージョン指定

バージョン1.8.8の実行ファイルをビルドする場合は、下記のように実行します。

$ java -jar BuildTools.jar --rev 1.8.8

EULA(使用許諾契約)同意

ビルドした「spigot-x.x.jar」の初回起動時は「eula.txt」への編集(使用許諾契約)が必要となりますので、かならず起動に失敗します。

これは、バニラのminecraft_Serverと同じですね

spigot起動

「eula.txt」を作成するために「spigot」を起動させます。

$ java -Xms1024M -Xmx1024M -jar spigot-1.9.jar nogui
Loading libraries, please wait...
[16:57:39 INFO]: Starting minecraft server version 1.9
[16:57:39 INFO]: Loading properties
[16:57:39 WARN]: server.properties does not exist
[16:57:39 INFO]: Generating new properties file
[16:57:39 WARN]: Failed to load eula.txt
[16:57:39 INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.
[16:57:39 INFO]: Stopping server

※「spigot-1.9.jar」の部分は起動させる実行ファイル名に読み替えてください。

eula.txt編集(使用許諾契約)

「spigot」を起動すると、「eula.txt」が作成されるので内容を確認し「eula=false」の部分を「eula=true」に変更します。

$ vi eula.txt

変更前

eula=false

変更後

eula=true

spigot動作確認

「eula.txt」の編集が完了したら、再度「spigot」を起動し「minecraft」クライアントからログインして動作確認してください。

spigot起動

$ java -Xms1024M -Xmx1024M -jar spigot-1.9.jar nogui

動作確認

「minecraft」クライアントからログインして動作確認します。

spigot停止

動作確認が終わったら、サーバのコンソールから「stop」コマンドを実行して、一度「spigot」を停止させておいてください。

[00:08:05 INFO]: tamohiko lost connection: Disconnected
[00:08:05 INFO]: tamohiko left the game.
>stop
[00:08:11 INFO]: Stopping the server
[00:08:11 INFO]: Stopping server
[00:08:11 INFO]: Saving players
[00:08:11 INFO]: Saving worlds
[00:08:11 INFO]: Saving chunks for level 'world'/Overworld
[00:08:11 INFO]: Saving chunks for level 'world_nether'/Nether
[00:08:11 INFO]: Saving chunks for level 'world_the_end'/The E

起動・停止スクリプト作成

「spigot」を「systemd」で管理し自動起動できるようにするため、起動と停止用のスクリプトを作成していきます。

起動スクリプト作成

「spi_start.sh」という名前で起動スクリプトを作成していきます。

$ vi spi_start.sh

変数説明

起動スクリプトで設定が必要な変数の説明です。

変数 設定内容
USERNAME spigot実行ユーザを設定
SERVICE spigot実行ファイルを設定(spigot-x.x.jarファイル名を指定)
SCNAME screenに指定する名前を設定
MC_PATH spigotがインストールされているディレクトリを設定
XMX spigot最大メモリ使用量を設定
XMS spigot初期メモリ使用量を設定

※「XMX」と「XMS」については、「spigot」が使用するメモリの量となります。この値を変更する場合は、かならずOSが使用するメモリ分は残るように設定指定ください。

起動スクリプト

#!/bin/bash

USERNAME='spiadmin'
SERVICE='spigot-1.9.jar'
SCNAME='spigot'
SPI_PATH='/opt/spigot'

XMX="1024M"
XMS="1024M"

cd $SPI_PATH

ME=`whoami`

if [ $ME == $USERNAME ] ; then
if pgrep -u $USERNAME -f $SERVICE > /dev/null
then
echo "$SERVICE is already running!"
else
echo "Starting $SERVICE..."
screen -AmdS $SCNAME java -Xmx$XMX -Xms$XMS -jar $SERVICE nogui
fi
else
echo "Please run the minecraft user."
fi

停止スクリプト作成

「spi_stop.sh」という名前で停止スクリプトを作成していきます。

$ vi spi_stop.sh

変数説明

停止スクリプトで設定が必要な変数の説明です。

変数 設定内容
USERNAME spigot実行ユーザを設定
SERVICE spigot実行ファイルを設定(spigot-x.x.jarファイル名を指定)
SCNAME screenに指定する名前を設定
MC_PATH spigotがインストールされているディレクトリを設定

停止スクリプト

#!/bin/bash

USERNAME='spiadmin'
SERVICE='spigot-1.9.jar'
SCNAME='spigot'
SPI_PATH='/opt/spigot'

cd $SPI_PATH

ME=`whoami`

if [ $ME == $USERNAME ] ; then
  if pgrep -u $USERNAME -f $SERVICE > /dev/null
    then
      echo "Stopping $SERVICE"
      screen -p 0 -S $SCNAME -X eval 'stuff "say SERVER SHUTTING DOWN IN 10 SECONDS. Saving map..."\015'
      screen -p 0 -S $SCNAME -X eval 'stuff "save-all"\015'
      sleep 10
      screen -p 0 -S $SCNAME -X eval 'stuff "stop"\015'
      sleep 10
      echo "Stopped minecraftserver"
    else
      echo "$SERVICE was not runnning."
  fi
else
  echo "Please run the minecraft user."
fi

パーミッション変更

spigot実行ユーザのみが起動・停止シェルを実行できるように、パーミッションの設定を行います。

$ chmod 744 spi_start.sh
$ chmod 744 spi_stop.sh

パーミッションの確認

spigot起動ユーザのみが、実行できるようになっていることを確認します。

$ ls -l spi_*
-rwxr--r-- 1 spiadmin spiadmin 411 Mar 10 16:01 spi_start.sh
-rwxr--r-- 1 spiadmin spiadmin 631 Mar 10 16:03 spi_stop.sh

スクリプト動作確認

起動スクリプト実行確認

$ ./spi_start.sh
screenの確認

「spi_start.sh」から起動された「spigot」はスクリプト内の「SCNAME」で設定された名前のscreen上で実行されています。

「screen -ls」コマンドでscreenの状態を確認できます。

$ screen -ls
There is a screen on:
        1472.spigot     (Detached)
1 Socket in /var/run/screen/S-spiadmin.
screenへの接続

「screen -r spigot」と実行することで接続(Attach)することができるので、正常にminecraftが起動されているかどうか確認します。

$ screen -r spigot
[12:34:45 INFO]: Cane Growth Modifier: 100%
[12:34:45 INFO]: Melon Growth Modifier: 100%
[12:34:45 INFO]: Mushroom Growth Modifier: 100%
[12:34:45 INFO]: Pumpkin Growth Modifier: 100%
[12:34:45 INFO]: Sapling Growth Modifier: 100%
[12:34:45 INFO]: Wheat Growth Modifier: 100%
[12:34:45 INFO]: NetherWart Growth Modifier: 100%
[12:34:45 INFO]: Tile Max Tick Time: 50ms Entity max Tick Time: 50ms
[12:34:45 INFO]: Item Despawn Rate: 6000
[12:34:45 INFO]: Item Merge Radius: 2.5
[12:34:45 INFO]: Arrow Despawn Rate: 1200
[12:34:45 INFO]: Allow Zombie Pigmen to spawn from portal blocks: true
[12:34:45 INFO]: View Distance: 10
[12:34:45 INFO]: Zombie Aggressive Towards Villager: true
[12:34:45 INFO]: Experience Merge Radius: 3.0
[12:34:45 INFO]: Preparing start region for level 0 (Seed: 6061323866878942654)
[12:34:46 INFO]: Preparing spawn area: 9%
[12:34:47 INFO]: Preparing spawn area: 68%
[12:34:48 INFO]: Preparing start region for level 1 (Seed: 6061323866878942654)
[12:34:49 INFO]: Preparing spawn area: 73%
[12:34:49 INFO]: Preparing start region for level 2 (Seed: 6061323866878942654)
[12:34:49 INFO]: Server permissions file permissions.yml is empty, ignoring it
[12:34:49 INFO]: Done (5.086s)! For help, type "help" or "?"

正常に起動が完了すると「Done」と表示されて、コマンド入力待ちになっているはずですので、ば正常に起動されていますので、minecraftのクライアントから接続できるか試してみてください。

動作確認が終了したましたら、今接続している「screen」から抜けて(Dtach)ください。

screenからの抜け方(Detach)

「Ctrl」+「a」を押下した後に「d」を押下することで「screen」から抜ける(Detach)ことができます。

停止スクリプト実行確認

起動スクリプトの動作確認が終わったら、次に停止スクリプトの動作確認を行います。

停止スクリプト実行
$ ./spi_stop.sh

「spigot」が無事停止できているか、「screen -ls」コマンドで確認してください。

正常にスクリプトが実行されると、「spigot」が停止し起動スクリプトで作成された「screen」も終了します。

$ screen -ls
No Sockets found in /var/run/screen/S-spiadmin.

自動起動設定

起動スクリプトと停止スクリプトが完成しましたら、今度はサーバの再起動を行っても自動で「spigot」が起動してくるように、自動起動の設定を行っていきます。

自動起動設定ファイル作成

まず、自動起動用の設定ファイルを作成していきます。

# vi /etc/systemd/system/spigot.service

設定箇所

設定が必要な箇所の説明です。

変数 設定内容
User spigot実行ユーザを設定
ExecStart spigot実行スクリプト
ExecStop spigot停止スクリプト
設定ファイル
[Unit]
Description=Minecraft Server (spigot)
After=network.target local-fs.target

[Service]
Type=forking
User=spiadmin
ExecStart=/opt/spigot/spi_start.sh
ExecStop=/opt/spigot/spi_stop.sh

[Install]
WantedBy=multi-user.target

自動起動設定

設定ファイルが完成しましたら、「systemctl」コマンドを使用して、自動起動の設定を行います。

# systemctl enable spigot.service

動作確認

自動機能設定が完了しましたら、動作確認としてサーバの再起動を行って「spigot」が自動的に起動してくるか確認してください。

無事起動してきましたら、インストール作業は完了となります。

シェアする

フォローする

コメント

  1. 匿名希望 より:

    手順通りに行い、
    ./spi_start.shを実行しようとしているのですが
    spigot-1.8.8.jar was not runnning.
    と出て実行できません。
    解決方法をご教授ください。

    • tamohiko より:

      匿名希望さん

      ご質問ありがとうございます。

      > ./spi_start.shを実行しようとしているのですが
      > spigot-1.8.8.jar was not runnning.
      > と出て実行できません。

      これは、直接下記のようなコマンドでspigotは実行できるが、「spi_start.sh」スクリプトからはspigotが実行できないという事でしょうか。
      $ java -Xms1024M -Xmx1024M -jar spigot-1.9.jar nogui

      まず、一点確認していただきたいのですが、

      > spigot-1.8.8.jar was not runnning.

      このメッセージは、spigotが起動していない場合に「spi_stop.sh」を実行した場合に表示されるメッセージのように見受けられます。
      spi_start.shの内容に間違いが無いか確認お願いします。

      内容に間違いがない場合は、下記のようにしてスクリプトを実行してみてください。
      これで、シェル実行状況が表示されるので、どこでエラーが発生しているのかがわかると思います。

      sh -x ./spi_start.sh

      エラーが発生している場所が分かりましたら、
      お手数をおかけしますが、エラーが発生している部分をこちらに書き込んでいただけますでしょうか。

      以上、よろしくお願いいたします。

      • 匿名希望 より:

        ご返信あありがとう御座います。

        $ java -Xms1024M -Xmx1024M -jar spigot-1.8.8
        .jar noguiでは実行できますが、./spi_start.shで実行できない状態でした。

        確認をしたところスプリクト内のメモリ指定の値が、
        XMX=”512M”
        XMS=”1024M”
        と逆に指定していたためと分かりました。

        値を正しくしたところ起動することができました。

        • tamohiko より:

          匿名希望さん

          返信ありがとうございます。

          無事起動できたようで何よりです。
          また、原因につきましてもお教えいただき、ありがとうございました。

          これから始まるマイクラライフをお楽しみくださいね!

  2. hypi より:

    こんにちは
    質問させてください

    ひととおり手順通りにでき、手動で起動スクリプトと停止スクリプトも無事にできましたが、「自動起動設定」が出来ない状態です。

    # systemctl enable spigot.service と打つと
    Failed to execute operation: Invalid argument と出てしまいます。

    確認する点などありましたらよろしくお願いします。

    • tamohiko より:

      hypiさん

      コメントありがとうございます。

      > # systemctl enable spigot.service と打つと
      > Failed to execute operation: Invalid argument と出てしまいます。

      自動起動設定時のエラーについてですが、「/etc/systemd/system/multi-user.target.wants」ディレクトリにリンクではなく「spigot.service」ファイルの実体が無いか確認してみて下さい。

      私の環境では「/etc/systemd/system/multi-user.target.wants」に実体のファイルがある場合に、「systemctl enable spigot.service」を実行すると同様のメッセージが表示されました。

      この場合は「/etc/systemd/system/multi-user.target.wants」にある「spigot.service」ファイルを削除してから、再度「systemctl enable spigot.service」を実行してみてください。

      • hypi より:

        tamohikoさん

        さっそくのご返答ありがとうございます。確認いたしましたところ
        「/etc/systemd/system/multi-user.target.wants」ディレクトリに「spigot.service」ファイルはありませんでした。
        「/etc/systemd/system」に「spigot.service」ファイルが存在している状態です。

        何度も申し訳ありません。
        よろしくお願いします。

        • tamohiko より:

          hypiさん

          ご確認ありがとうございます。

          > 「/etc/systemd/system/multi-user.target.wants」ディレクトリに「spigot.service」ファイルはありませんでした。
          > 「/etc/systemd/system」に「spigot.service」ファイルが存在している状態です。

          であれば、ちょっとすぐには原因がわからないかもしれません。

          とりあえずの対応としては、
          下記のように直接シンボリックリンクを張るという方法もありますので試してみてください。

          # ln -s /etc/systemd/system/spigot.service /etc/systemd/system/multi-user.target.wants/

          Failed to execute operation: Invalid argumentになる原因についてはもう少し調べてみます。

  3. Reaper より:

    手順どうりに進めてるんですけど、起動スクリプト実行確認の場所で躓いてます。
    ./spi_start.shのところはうまく行ってるんですけどその後のscreenの確認で”screen -ls”のコマンド打ったところscreen -ls
    “No Sockets found in /var/run/screen/S-spiadmin.”と返されてしまいます。どうしたらいいですか?

    • tamohiko より:

      Reaperさん

      コメントありがとうございます。

      spi_start.shでspigot自体は起動できていますか?
      出来ていないようでしたら、スクリプトに何らかの間違いがあると思いますので、再度確認してみて下さい。

      スクリプトを実行する際に「-x」を付けて実行すると、実行状況が表示されるので、原因調査の役に立つと思います。

      あと確認する点としては、「SERVICE=」の部分で設定しているjarファイル名は間違いないか、「SPI_PATH=」で指定しているディレクトに間違いがないかも確認してみてください。

      • Reaper より:

        「SPI_PATH=」で指定しているディレクトは、spigot.jerがある場所の指定ですよね

        • tamohiko より:

          Reaperさん

          > 「SPI_PATH=」で指定しているディレクトは、spigot.jerがある場所の指定ですよね

          はい、そのとおりです。

  4. Reaper より:

    Serverは開いたんですけど、前のワールドをVPSサーバーに入れたらすぐにサーバーが閉じてしまいます、どうしたらいいですか?

    • tamohiko より:

      Reaperさん

      状況をもう少し詳しく教えていただけますでしょうか。

      > Serverは開いたんですけど

      これはspigot自体は起動しているということですか。

      > 前のワールドをVPSサーバーに入れたらすぐにサーバーが閉じてしまいます

      サーバが閉じてしまうとはクライアントから入れないという事でしょうか?
      それとも、spigot自体が終了してしまうという事ですか?

      現在の情報だけですと、何が起きているのかが分からないので、
      logsフォルダにあるログを確認して頂けますでしょうか。

      そちらを確認することで、もう少し詳しい情報や原因がわかるかもしれません。

      以上、よろしくお願いいたします。

      • Reaper より:

        [Server thread/INFO]: Saving worldsのところでServerが閉じてしまいます

        • tamohiko より:

          Reaperさん

          > [Server thread/INFO]: Saving worldsのところでServerが閉じてしまいます

          調査ありがとうございます。

          ただ、このメッセージだけでは原因が分からないので、
          お手数をおかけしますが、もう少し詳しい情報を教えてください。

          spigotの起動に失敗するという事は、
          ログの中にERRORとかWARNレベルのログが表示されていると思うのですが、
          それらに関連するログを教えてください。

  5. root より:

    ソースはオープンソースですか?

    • tamohiko より:

      rootさん

      コメントありがとうございます。
      お返事遅れてすいません。

      spigotのソースということでしょうか?
      であれば、オープンソースですよ。

      詳しくは公式サイトをご確認いただくと詳しい情報が記述されています。
      https://www.spigotmc.org/wiki/about-spigot/

  6. kery より:

    サーバーの動作確認のところで
    サーバーログインしようとすると
    クライアント側でio.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused:
    とエラーメッセージが表示されます……

    • tamohiko より:

      keryさん

      コメントありがとうございます。

      エラーメッセージに「Connection refused:」と出ているので、何らかの理由で接続が拒絶されているみたいですね。

      原因の切り分けとして、いったんクライアント側OSのファイアウォールを停止して接続できるか確認してみることはできますか?(確認後はファイアウォールの再開を忘れずに行ってください)

      もし、これで接続できるようであれば、ファイアウォールが原因であると考えられるので、ファイアウォールの設定でjavaが許可されているか確認してみてください。

  7. matter より:

    間違えて全てrootフォルダに保存してしまったのですが、その場合スクリプトの設定はどこを変えればいいのでしょうか?

    • tamohiko より:

      matterさん

      コメントありがとうございます。

      > 間違えて全てrootフォルダに保存してしまったのですが、その場合スクリプトの設定はどこを変えればいいのでしょうか?

      「/root」ディレクトリにspigotを保存した場合は、起動と停止スクリプトの「SPI_PATH」の部分を変更する必要があります。

      「/root/spigot」といったディレクトリに保存している場合は下記のようになります。

      変更前 SPI_PATH=’/opt/spigot’
      変更後 SPI_PATH=’/root/spigot’

      また、起動・停止スクリプトの保存ディレクトリも変更されている場合はしている場合は自動起動用の設定ファイルである「spigot.service」の「ExecStart」と「ExecStop」も変更する必要があります。

      あと、「/root」ディレクトリに保存した場合に気になる点としては、ディレクトリのパーミッションの関係で「spigot」の実行ユーザを「root」に設定しなければエラーとなるかもしれません。

      ですが、「spigot」を「root」ユーザで実行することはセキュリティの関係からおすすめできませんので、どこか別のディレクトリに移動させて運用するほうが良いのではないかと思います。

  8. 野崎 より:

    /stopをやった後に自動再起動するようにと思って下のやつをstart.shに追加してみたんですけど、プレーヤーがログインした瞬間落ちてしまいます
    もしわかれば教えてください!

    while true
    do
    screen -AmdS $SCNAME java -Xmx$XMX -Xms$XMS -jar $SERVICE nogui
    echo “Restarting $SERVICE …”
    for i in 5 4 3 2 1
    do
    echo “$i…”
    sleep 1
    done
    echo “I’M REBOOTING”
    done

    screenで見ているとエラーは出てないんですが、
    screen -r spigot とコンソールにいれると、xxx.spigotみたいなのが何個かでてきてしまいます

    環境:
    conohaの2GBプラン
    CentOS7
    Bungeecord使用(ロビーサーバ+ミニゲームサーバの組み合わせで、今回はミニゲームサーバのほうを自動再起するようにしたい)

    • 野崎 より:

      ごめんなさい自己解決しました
      ロビーサーバ用のポートと、ミニゲームサーバ用のポートが同じになってしまっていたため、起動直後にstopしてたみたいです。。。

      • 野崎 より:

        あとstart.shはこれにかえました
        https://qiita.com/sifue/items/9ce2ddebccb60a939862

        • tamohiko より:

          野崎さん
          コメントとありがとうございます。

          問題は無事解決されたようでなによりです。

          > ロビーサーバ用のポートと、ミニゲームサーバ用のポートが同じになってしまっていたため、起動直後にstopしてたみたいです。。。

          ポートの衝突はよくやりがちな失敗ですよね。
          私もたまに同じようなことをやってしまいます。

          > あとstart.shはこれにかえました

          死活監視してくれるのはとても便利ですね!
          ご紹介ありがとうございました。

          ちなみに、systemdの機能でも同様のことができたりします。
          (野崎さんが思い描いている動作と異なるかもしれませんが)
          systemd用の自動起動設定ファイルの[Service]欄に「Restart=always」という設定を追加することで、サービスが終了した場合に自動的に再起動してくれるようになります。

          [Service]
          Restart=always

          ただし、この設定をいれるとサーバを停止させることが出来なくなるので私は設定していません…

          その点、紹介していただいたスクリプトの方がminecraftサーバを停止させやすくて使い勝手が良さそうですね。

  9. sasa より:

    すみません。記事の通り設定を進めてサーバー起動も問題なく出来ましたが、起動スクリプトの作成がうまくいかないので教えてほしいです。
    使用しているvpsはconohaで、spigotは1.12.2を使用しています。

    http://or2.mobi/index.php?mode=image&file=189454.jpg

    画像のように設定しており、スクリプトを実行すると「Starting spigot-1.12.2.jar…」となるだけで、サーバーが起動しません。
    スクリプトを使用しない起動方法はうまくいくのですが、何がいけないんでしょうか?

    • tamohiko より:

      sasaさん

      コメントありがとうございます。

      起動スクリプトの件ですが、スクリプト実行後に「logs」フォルダ内の「latest.log」ファイルを確認してみてください。

      何か起動しない原因が表示されているかも知れません。

      また、スクリプトを実行する際に「$ sh -x spi_start.sh」といったように「-x」を指定してスクリプトを実行するとスクリプトの実行状況が分かるので、そちらの方も確認してみてください。

  10. とたけけ より:

    プラグインはどのようにして導入するのですか?

    • tamohiko より:

      とたけけさん

      コメントありがとうございます。

      プラグインは基本的にダウンロードした.jarファイルを「plugins」フォルダに格納しspigotを再起動することで有効化することが出来ます。

      ただ、spigotに対応したバージョンのプラグインを導入する必要があるので、その辺は注意してください。(プラグインの配布サイトにそのあたりの情報は表示されていると思います)

      その後、プラグインによっては「plugin」フォルダ内に作成されたプラグインのフォルダ内の設定ファイルを編集する必要があります。

  11. sasa より:

    あけましておめでとうございます。

    実行後にlogsを確認しましたが、ログには直前にサーバーを終了した情報までしか載っておらず、起動のログは残っていませんでした。

    http://or2.mobi/index.php?mode=image&file=189694.jpg
    -xを指定した際表示されるログがこちらです。黄色い部分はユーザー名や管理者名なので隠しています。

    http://or2.mobi/index.php?mode=image&file=189696.jpg
    spigotフォルダに含まれるデータがこちらです。

    何が原因でしょうか?

    • tamohiko より:

      sasaさん

      お返事が大変遅くなってしまい申し訳ありません。
      こちらのブログの設定の関係で、せっかくいただいたコメントが反映されていませんでした。
      本当にすみません。

      「-x」での起動ログ上で気になるのは、「Xmx」と「Xms」の値が逆ではないでしょうか?
      (前回頂いたコメントの段階で気づけずにすみません)

      「Xmx」が使用するメモリの最大値で、「Xms」が初期メモリ使用値となるため、「Xmx」の値は「Xms」の値より大きいか同等である必要があります。

      ですので、起動スクリプト上で「XMX」と「XMS」の値を同じにするか、「XMX=3072M」と「XMS=1024M」といったように値を逆に設定して再度試してみてください。

      以上、よろしくお願いいたします。

  12. yuyumo6 より:

    起動スクリプトの作成がうまく行きません
    どうすればいいのでしょうか?
    http://or2.mobi/index.php?mode=image&file=200001.png

    • tamohiko より:

      yuyumo6さん

      コメントありがとうございます。

      スクリプトの方を実際に見ていないのですが、張り付けてもらった画像からは下記の部分で原因でエラーが出ているように見えます。

      ME=`whoami`
      if [ $ME == $USERNAME ] ; then

      実行時のログを見てみますと、変数の設定部分で「USERNAME」と記述する箇所が「ERNAME」となっているように見えますので、そこの部分を確認してみてください。

      以上、よろしくお願いします。

  13. lol より:

    このサイトとはあまり関係ないのですが、サーバーは立てれたのですがそのサーバーにワールドデータを入れるやり方がわからないのですが、どうすればいいのでしょうか?
    さくらVPSです。おねがいします

    • lol より:

      あと一応サーバーには入れました。
      VPSに自分のワールドを入れられればいいのですが…
      お願いします!!

      • tamohiko より:

        lol さん

        コメントありがとうございます。

        > このサイトとはあまり関係ないのですが、サーバーは立てれたのですがそのサーバーにワールドデータを入れるやり方がわからないのですが、どうすればいいのでしょうか?

        別環境で遊んでいたワールドデータを持ってきたいという事でしょうか?
        であれば、minecraftがインストールされているディレクトリにある、
        「world」ディレクトリがワールドデータとなるので、それを入れ替えたいワールドデータと置き換えれれば良いですよ。

        Windowsからのワールドデータのアップロード方法は、
        このあたりの書き込みを参考にしてみてください。

        https://minecraft.server-memo.net/conoha_mc_install/#comment-5034

        他にご不明な点がありましたら、ご質問お願いします。

        • lol より:

          win10なのでソフト使ってアップロードしようとしたんですけど、なぜか接続できなくて…
          ちゃんとIPもPASSWARDもあってるのに出来ないんです。
          どうか対処法を教えてください!><

          • lol より:

            ちなみにソフトは WinSCPとFFFTPを使いました。

          • tamohiko より:

            アップロードはscpかsftpになると思いますが、接続ポート番号はあっていますか?

            また、SSH接続に鍵認証方式を採用しているのであれば、秘密鍵の登録は行っていますか?

            WinSCPを使用してSFTPをする際の手順は、こちらのサイトが参考になると思いますので、確認してみてください。

            https://support.conoha.jp/v/sftpwinscp/

            sftpで接続する際は、rootユーザでは接続できないと思いますので、minecraftをインストールしたユーザで接続してください。

  14. lol より:

    できるようになりました!
    ありがとうございます!

    • tamohiko より:

      よかったです!

      • lol より:

        聞き忘れたことがあったんですが、自分のPCと同期できる機能ってありますか?

        • lol より:

          あとスクリプトの$は消して、USERNAMEとか入れればいいんですよね?

          • tamohiko より:

            > あとスクリプトの$は消して、USERNAMEとか入れればいいんですよね?

            これはどの部分を指しているのでしょうか?

        • tamohiko より:

          minecraftやspigotにはそういった機能はありませんので、手動でワールドデータのコピーが一般的な方法となります。

          ちなみに、ワールドデータをコピーする際には、コピー元およびコピー先のマイクラを停止させておく必要があります。

  15. YYYY より:

    こんにちは。
    前のワールドを入れると大量のログが出てきて、サーバーには入れてもワールドが読み込まれてないんですよ。
    どうすれば解決できますか?

    • YYYY より:

      worldファイルに別のワールドのファイルを入れると落ちてしまいます。

      • tamohiko より:

        YYYYさん

        コメントありがとうございます。

        > 前のワールドを入れると大量のログが出てきて、サーバーには入れてもワールドが読み込まれてないんですよ。
        > どうすれば解決できますか?

        表示されるログにエラーの内容が表示されていると思いますが、なんと表示されていますか?

        他に下記の項目についても確認してみてください

        ・ワールドデータのコピー元とコピー先のマイクラのバージョンはあっているか
        ・java版のワールドデータであるか
        ・ワールドデータの所有者がマイクラ実行ユーザと同じかどうか

        • YYYY より:

          [08:23:41 ERROR]: Failed to save chunk
          java.lang.NullPointerException: null
          at net.minecraft.server.v1_12_R1.RegionFile.a(RegionFile.java:200) ~[spigot-1.12.2.jar:git-S pigot-79a30d7-acbc348]
          at net.minecraft.server.v1_12_R1.RegionFile$ChunkBuffer.close(RegionFile.java:304) ~[spigot- 1.12.2.jar:git-Spigot-79a30d7-acbc348]
          at java.util.zip.DeflaterOutputStream.close(DeflaterOutputStream.java:241) ~[?:1.8.0_242]
          at java.io.FilterOutputStream.close(FilterOutputStream.java:159) ~[?:1.8.0_242]
          at java.io.FilterOutputStream.close(FilterOutputStream.java:159) ~[?:1.8.0_242]
          at net.minecraft.server.v1_12_R1.RegionFileCache.e(RegionFileCache.java:95) ~[spigot-1.12.2. jar:git-Spigot-79a30d7-acbc348]
          at net.minecraft.server.v1_12_R1.ChunkRegionLoader.b(ChunkRegionLoader.java:212) ~[spigot-1. 12.2.jar:git-Spigot-79a30d7-acbc348]
          at net.minecraft.server.v1_12_R1.ChunkRegionLoader.processSaveQueueEntry(ChunkRegionLoader.j ava:195) [spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
          at net.minecraft.server.v1_12_R1.ChunkRegionLoader.a(ChunkRegionLoader.java:167) [spigot-1.1 2.2.jar:git-Spigot-79a30d7-acbc348]
          at net.minecraft.server.v1_12_R1.FileIOThread.c(SourceFile:37) [spigot-1.12.2.jar:git-Spigot -79a30d7-acbc348]
          at net.minecraft.server.v1_12_R1.FileIOThread.run(SourceFile:30) [spigot-1.12.2.jar:git-Spig ot-79a30d7-acbc348]
          at java.lang.Thread.run(Thread.java:748) [?:1.8.0_242]

          • YYYY より:

            こんなようなログがいっぱい流れます
            ワールド内を動いたりすると

          • YYYY より:

            なんかワールドデータのlevel.datファイルなどが文字化けしてました。
            これって元からなのでしょうか?

          • tamohiko より:

            ログを見る限り、ワールドデータが破損しているようにみえますね。
            もう一度ワールドデータをコピーしなおしてみても現象はかわりませんか?

            > なんかワールドデータのlevel.datファイルなどが文字化けしてました。
            > これって元からなのでしょうか?

            level.datはテキストファイルではないので、catとかで中身をみても文字化けしてしまいます。

          • YYYY より:

            実は、実験用で自分のPCでサーバー立ててやってみたんですけど、
            しっかりできるんですよ

          • YYYY より:

            あと、java版のワールドってどうゆう意味ですか?
            spigotサーバーで建てたやつを、VPSのほうに送っちゃダメなんですか?

          • tamohiko より:

            spigotからspigotであれば問題ありません。

          • YYYY より:

            VPS内で作られたworldしかちゃんと動いてくれないんですよね
            でも、自分のPCで建てたらできるっていう、、、

          • YYYY より:

            1.12.2 OFのファイルから spigot
            そのspigotからvps spigot
            でも行けますよね?

          • tamohiko より:

            1.12.2 OFのOFが何なのかが良くわかりませんが、1.12.2 OFからspigotにワールドデータをコピーして正常に動作することを確認後に、そのワールドデータをVPS上のspigotにワールドデータをコピーという事でしょうか?

            1.12.2 OFからワールドデータをコピーしたspigotとVPS上のspigotの環境(バージョン等)が同じであれば大丈夫だと思います。

            VPSへワールドデータをコピーする際にデータが破損していないかMD5ハッシュ値をコピー元とコピー先で比較してみてください。
            CentOSなら「md5sum」コマンドで確認できます。

            md5sum level.dat

            ちなみに、ワールドデータのコピーはどちらのspigotも停止してから行っていますよね?

          • YYYY より:

            level.dat: No such file or directory
            とでてきました。

          • YYYY より:

            あとサーバーを停止中って、spigotですよね?
            VPS自体は止めなくてもいいんですよね?

          • YYYY より:

            —- Minecraft Crash Report —-
            // My bad.

            Time: 3/12/20 6:48 AM
            Description: Exception in server tick loop

            java.lang.RuntimeException: Failed to check session lock for world located at ./world, aborting. Stop the server and delete the session.lock in this world to prevent further issues.
            at net.minecraft.server.v1_12_R1.WorldNBTStorage.i(WorldNBTStorage.java:63)
            at net.minecraft.server.v1_12_R1.WorldNBTStorage.(WorldNBTStorage.java:47)
            at net.minecraft.server.v1_12_R1.ServerNBTManager.(SourceFile:21)
            at net.minecraft.server.v1_12_R1.MinecraftServer.a(MinecraftServer.java:265)
            at net.minecraft.server.v1_12_R1.DedicatedServer.init(DedicatedServer.java:272)
            at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:545)
            at java.lang.Thread.run(Thread.java:748)

            A detailed walkthrough of the error, its code path and all known details is as follows:
            —————————————————————————————

            — System Details —
            Details:
            Minecraft Version: 1.12.2
            Operating System: Linux (amd64) version 3.10.0-1062.12.1.el7.x86_64
            Java Version: 1.8.0_242, Oracle Corporation
            Java VM Version: OpenJDK 64-Bit Server VM (mixed mode), Oracle Corporation
            Memory: 886652576 bytes (845 MB) / 1029177344 bytes (981 MB) up to 1029177344 bytes (981 MB)
            JVM Flags: 2 total; -Xms1024M -Xmx1024M
            IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
            CraftBukkit Information:
            Running: CraftBukkit version git-Spigot-79a30d7-acbc348 (MC: 1.12.2) (Implementing API version 1.12.2-R0.1-SNAPSHOT) true
            Plugins: { PermissionsEx v1.23.4 ru.tehkode.permissions.bukkit.PermissionsEx [[t3hk0d3, zml]], WorldEdit v6.1.9;caf0ad9 com.sk89q.worldedit.bukkit.WorldEditPlugin [], Vault v1.7.2-b107 net.milkbowl.vault.Vault [cereal, Sleaker, mung3r], Essentials v2.17.2.0 com.earth2me.essentials.Essentials [Zenexer, ementalo, Aelux, Brettflan, KimKandor, snowleo, ceulemans, Xeology, KHobbits, md_5, Iaccidentally, drtshock, vemacs, SupaHam, md678685], MyCommand v5.6.1 it.mri.mycommand.Main [emmerrei a.k.a Ivanpro], WorldGuard v6.2.2-SNAPSHOT;8eeab68 com.sk89q.worldguard.bukkit.WorldGuardPlugin [], Multiverse-Core v2.5.0-b727 com.onarandombox.MultiverseCore.MultiverseCore [Rigby, fernferret, lithium3141, main–, dumptruckman], LunaChat v2.8.9 com.github.ucchyocean.lc.LunaChat [ucchy],}
            Warnings: DEFAULT
            Reload Count: 0
            Threads: { TIMED_WAITING Spigot Watchdog Thread: [java.lang.Thread.sleep(Native Method), org.spigotmc.WatchdogThread.run(WatchdogThread.java:92)], RUNNABLE DestroyJavaVM: [], RUNNABLE Server thread: [java.lang.Thread.dumpThreads(Native Method), java.lang.Thread.getAllStackTraces(Thread.java:1610), org.bukkit.craftbukkit.v1_12_R1.CraftCrashReport.call(CraftCrashReport.java:30), net.minecraft.server.v1_12_R1.CrashReportSystemDetails.a(SourceFile:78), net.minecraft.server.v1_12_R1.CrashReport.h(CrashReport.java:128), net.minecraft.server.v1_12_R1.CrashReport.(CrashReport.java:35), net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:597), java.lang.Thread.run(Thread.java:748)], WAITING Snooper Timer: [java.lang.Object.wait(Native Method), java.lang.Object.wait(Object.java:502), java.util.TimerThread.mainLoop(Timer.java:526), java.util.TimerThread.run(Timer.java:505)], WAITING Reference Handler: [java.lang.Object.wait(Native Method), java.lang.Object.wait(Object.java:502), java.lang.ref.Reference.tryHandlePending(Reference.java:191), java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153)], WAITING NonBlockingInputStreamThread: [java.lang.Object.wait(Native Method), org.bukkit.craftbukkit.libs.jline.internal.NonBlockingInputStream.run(NonBlockingInputStream.java:278), java.lang.Thread.run(Thread.java:748)], TIMED_WAITING Server Infinisleeper: [java.lang.Thread.sleep(Native Method), net.minecraft.server.v1_12_R1.DedicatedServer$1.run(DedicatedServer.java:60)], TIMED_WAITING Timer-0: [java.lang.Object.wait(Native Method), java.util.TimerThread.mainLoop(Timer.java:552), java.util.TimerThread.run(Timer.java:505)], RUNNABLE Signal Dispatcher: [], RUNNABLE Server console handler: [java.io.FileInputStream.readBytes(Native Method), java.io.FileInputStream.read(FileInputStream.java:255), java.io.BufferedInputStream.fill(BufferedInputStream.java:246), java.io.BufferedInputStream.read(BufferedInputStream.java:265), org.bukkit.craftbukkit.libs.jline.internal.NonBlockingInputStream.read(NonBlockingInputStream.java:169), org.bukkit.craftbukkit.libs.jline.internal.NonBlockingInputStream.read(NonBlockingInputStream.java:137), org.bukkit.craftbukkit.libs.jline.internal.NonBlockingInputStream.read(NonBlockingInputStream.java:246), org.bukkit.craftbukkit.libs.jline.internal.InputStreamReader.read(InputStreamReader.java:261), org.bukkit.craftbukkit.libs.jline.internal.InputStreamReader.read(InputStreamReader.java:198), org.bukkit.craftbukkit.libs.jline.console.ConsoleReader.readCharacter(ConsoleReader.java:2145), org.bukkit.craftbukkit.libs.jline.console.ConsoleReader.readLine(ConsoleReader.java:2349), net.minecraft.server.v1_12_R1.DedicatedServer$2.run(DedicatedServer.java:85)], RUNNABLE Netty Epoll Server IO #0: [io.netty.channel.epoll.Native.epollWait0(Native Method), io.netty.channel.epoll.Native.epollWait(Native.java:114), io.netty.channel.epoll.EpollEventLoop.epollWait(EpollEventLoop.java:235), io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:252), io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884), java.lang.Thread.run(Thread.java:748)], TIMED_WAITING ObjectCleanerThread: [java.lang.Object.wait(Native Method), java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:144), io.netty.util.internal.ObjectCleaner$1.run(ObjectCleaner.java:54), io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30), java.lang.Thread.run(Thread.java:748)], TIMED_WAITING process reaper: [sun.misc.Unsafe.park(Native Method), java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215), java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460), java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362), java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:941), java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1073), java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134), java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624), java.lang.Thread.run(Thread.java:748)], WAITING Finalizer: [java.lang.Object.wait(Native Method), java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:144), java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:165), java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:216)], WAITING Thread-4: [sun.misc.Unsafe.park(Native Method), java.util.concurrent.locks.LockSupport.park(LockSupport.java:175), java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039), java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442), com.mojang.util.QueueLogAppender.getNextLogEvent(QueueLogAppender.java:77), org.bukkit.craftbukkit.v1_12_R1.util.TerminalConsoleWriterThread.run(TerminalConsoleWriterThread.java:27), java.lang.Thread.run(Thread.java:748)],}
            Recent tasks from -31–1{}
            Profiler Position: N/A (disabled)
            Player Count: 0 / 20; []
            Is Modded: Definitely; Server brand changed to ‘Spigot’
            Type: Dedicated Server (map_server.txt)

  16. YYYY より:

    [09:49:20 ERROR]: Failed to save chunk
    java.lang.NullPointerException: null
    at net.minecraft.server.v1_12_R1.RegionFile.a(RegionFile.java:200) ~[spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
    at net.minecraft.server.v1_12_R1.RegionFile$ChunkBuffer.close(RegionFile.java:304) ~[spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
    at java.util.zip.DeflaterOutputStream.close(DeflaterOutputStream.java:241) ~[?:1.8.0_242]
    at java.io.FilterOutputStream.close(FilterOutputStream.java:159) ~[?:1.8.0_242]
    at java.io.FilterOutputStream.close(FilterOutputStream.java:159) ~[?:1.8.0_242]
    at net.minecraft.server.v1_12_R1.RegionFileCache.e(RegionFileCache.java:95) ~[spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
    at net.minecraft.server.v1_12_R1.ChunkRegionLoader.b(ChunkRegionLoader.java:212) ~[spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
    at net.minecraft.server.v1_12_R1.ChunkRegionLoader.processSaveQueueEntry(ChunkRegionLoader.java:195) [spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
    at net.minecraft.server.v1_12_R1.ChunkRegionLoader.a(ChunkRegionLoader.java:167) [spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
    at net.minecraft.server.v1_12_R1.FileIOThread.c(SourceFile:37) [spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
    at net.minecraft.server.v1_12_R1.FileIOThread.run(SourceFile:30) [spigot-1.12.2.jar:git-Spigot-79a30d7-acbc348]
    at java.lang.Thread.run(Thread.java:748) [?:1.8.0_242]

  17. YYYY より:

    基本的に、パーミッションはどうすればいいんですか?
    すべてrootから変えたんですけどそれでもだめなんですか?

    • tamohiko より:

      > level.dat: No such file or directory
      > とでてきました。

      level.datがあるディレクトリでコマンド実行しましたか?

      > あとサーバーを停止中って、spigotですよね?
      > VPS自体は止めなくてもいいんですよね?

      はいspigotを停止してあれば問題ありません。

      > 基本的に、パーミッションはどうすればいいんですか?
      > すべてrootから変えたんですけどそれでもだめなんですか?

      rootからどのユーザに変えました?
      spigotをインストールおよび動作させているユーザと同じにしてあれば問題ないと思いますが。

      たとえばこのページの手順通りspigotのインストール行った場合、「spiadmin」というユーザを作成してインストールしているので、「world」ディレクトとその中のデータは、ユーザとグループともに「spiadmin」に設定しておく必要があります。

  18. 加藤 より:

    こんばんは。
    自動起動設定ファイル作成が出来ません。
    ファイルを編集し、:wq!で保存した所
    “/etc/systemd/system/spigot.service” E212:Can’t open file for writing
    Press ENTER or type command to continue
    というメッセージが表示され保存出来ません。
    解決方法などがあればご教示願います。

    • tamohiko より:

      加藤さん

      コメントありがとうございます。

      > E212:Can’t open file for writing Press ENTER or type command to continue

      このエラーはviで書き込み権限がないのに、保存しようとした場合に表示されるメッセージです。

      「/etc/systemd/system/」ディレクトリは、rootユーザのみしか書き込み権限がないので、
      自動起動設定用のファイルを作成するときは、rootユーザで作業を行う必要があります。

      もし、一般ユーザで作業している場合はrootユーザでファイルの作成を行ってみてください。

  19. すめし より:

    すいません、起動パッチを設定して、コンソールで起動コマンド打ってみたんですけど、Starting spigot-1.12.2.jar…しかでなくて、サーバーが読み込まれてるログが出てこないんですけどどうせれば解決できますか?

    • tamohiko より:

      すめしさん

      コメントありがとうございます。
      これは起動用のスクリプトを実行してもspigotのサーバが起動しないという認識で良いでしょうか?

      screenの仮想端末には接続(Attach)できますか?
      出来ているのであれば、そこに何かログが表示されていないか確認お願いします。

      screenの仮想端末には接続(Attach)出来ない場合は、起動スクリプトを実行する際に「-x」オプションを指定してから実行すると、上手く動作しない原因がわかるかもしれません。

      サイトで解説している手順で
      $ ./spi_start.sh
      と実行している部分を下記のようにしてみてください。
      $ sh -x ./spi_start.sh

      これで、シェルスクリプトの実行状況が詳しく表示されるようになるため、そこから問題がある部分が分かるかもしれません。

    • すめし より:

      ごめんなさい自分で解決できました