Minecraftサーバーを起動したいです。そのため、.jar
ファイルをダウンロードし、Java 8をインストールし、次のユーザーとディレクトリを作成しました。
ls -la
insgesamt 29552
drwxrwxr-x. 4 minecraft minecraft 235 26. Mär 19:32 .
drwx------. 3 minecraft minecraft 97 25. Mär 19:28 ..
-rw-rw-r--. 1 minecraft minecraft 2 26. Mär 21:16 banned-ips.json
-rw-rw-r--. 1 minecraft minecraft 2 26. Mär 21:16 banned-players.json
-rw-rw-r--. 1 minecraft minecraft 181 25. Mär 19:22 eula.txt
drwxrwxr-x. 2 minecraft minecraft 4096 26. Mär 21:16 logs
-rwxrwxr-x. 1 minecraft minecraft 30222121 18. Sep 2017 minecraft_server.jar
-rw-rw-r--. 1 minecraft minecraft 2 26. Mär 21:16 ops.json
-rw-rw-r--. 1 minecraft minecraft 754 26. Mär 21:16 server.properties
-rwxrwxr-x. 1 minecraft minecraft 141 26. Mär 21:08 startup-server.sh
-rw-rw-r--. 1 minecraft minecraft 214 26. Mär 21:17 usercache.json
-rw-rw-r--. 1 minecraft minecraft 2 25. Mär 19:23 whitelist.json
drwxrwxr-x. 9 minecraft minecraft 166 26. Mär 21:38 world
server.shの起動:
#!/bin/bash
echo I am starting server now
now=$(date +%d_%m_%Y_%H_%M_%S)
/usr/bin/java -Xmx4096M -Xms4096M -jar minecraft_server.jar nogui
/usr/bin/startup-minecraft-サーバー:
#!/bin/sh
SERVICE_NAME=Minecraft-Server
PID_PATH_NAME=/tmp/minecraft-server.pid
case $1 in
start)
echo "Starting $SERVICE_NAME ..."
if [ ! -f $PID_PATH_NAME ]; then
exec /home/minecraft/server/startup-server.sh > /dev/null 2>&1 & echo $! > $PID_PATH_NAME
echo "$SERVICE_NAME started ..."
else
echo "$SERVICE_NAME is already running ..."
fi
;;
stop)
if [ -f $PID_PATH_NAME ]; then
PID=$(cat $PID_PATH_NAME);
echo "$SERVICE_NAME stoping ..."
kill $PID;
echo "$SERVICE_NAME stopped ..."
rm $PID_PATH_NAME
else
echo "$SERVICE_NAME is not running ..."
fi
;;
restart)
if [ -f $PID_PATH_NAME ]; then
$0 stop
$0 start
else
echo "$SERVICE_NAME is not running ..."
fi
;;
status)
if [ -e $PID_PATH_NAME ]; then
echo minecraft server is running, pid=`cat $PID_PATH_NAME`
else
echo minecraft server is NOT running
exit 1
fi
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
esac
exit 0
私が電話するたびに
startup-minecraft-server start
それは私に言う:
./startup-minecraft-server start
Starting Minecraft-Server ...
Minecraft-Server started ...
状態を確認してください。
./startup-minecraft-server status
minecraft server is running, pid=30639
しかし、
ps -p 30639 -o comm=
何も出てこなかった。なぜこれが起こるのかわかりません。
編集する:
スクリプトを修正しましたが、それでも以前と同じ結果が得られます。
#!/bin/sh
SERVICE_NAME=Minecraft-Server
PATH_TO_JAR=/home/minecraft/server/minecraft_server.jar
PID_PATH_NAME=/tmp/minecraft-server.pid
case $1 in
start)
echo "Starting $SERVICE_NAME ..."
if [ ! -f $PID_PATH_NAME ]; then
exec /usr/bin/java -Xmx4096M -Xms4096M -jar $PATH_TO_JAR nogui > /dev/null 2>&1 & echo $! > $PID_PATH_NAME
echo "$SERVICE_NAME started ..."
else
echo "$SERVICE_NAME is already running ..."
fi
;;
stop)
if [ -f $PID_PATH_NAME ]; then
PID=$(cat $PID_PATH_NAME);
echo "$SERVICE_NAME stoping ..."
kill $PID;
echo "$SERVICE_NAME stopped ..."
rm $PID_PATH_NAME
else
echo "$SERVICE_NAME is not running ..."
fi
;;
restart)
if [ -f $PID_PATH_NAME ]; then
$0 stop
$0 start
else
echo "$SERVICE_NAME is not running ..."
fi
;;
status)
if [ -e $PID_PATH_NAME ]; then
echo minecraft server is running, pid=`cat $PID_PATH_NAME`
else
echo minecraft server is NOT running
exit 1
fi
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
esac
exit 0
答え1
exec /home/minecraft/server/startup-server.sh > /dev/null 2>&1 & echo $!
startup-server.sh
ほぼすぐに終了するPIDを提供します。しかし、欲しいPIDは
/usr/bin/java -Xmx4096M -Xms4096M -jar minecraft_server.jar nogui
業務方法に応じて、以下が必要です。
exec /usr/bin/java -Xmx4096M -Xms4096M -jar minecraft_server.jar nogui
さらに、それだけでは十分でif [ -f $PID_PATH_NAME ]
はありません。プロセスがまだ存在し、正しいことを常に確認する必要があります。
同様のものを使用することは合理的かもしれませんstartproc
。
答え2
これはスクリプト(新しいbashプロセス)PID
から返されます。このコマンドでそれをインポートする必要/home/minecraft/server/startup-server.sh
があります。PID
/usr/bin/java -Xmx4096M -Xms4096M -jar minecraft_server.jar nogui
答え3
この行で問題を解決しました。
デーモンを削除して$!をechoするには>を追加します。
/usr/bin/java -Xmx4096M -Xms4096M -jar $PATH_TO_JAR nogui > /dev/null 2>&1 & echo $! >>$PID_PATH_NAME
私もそうでした:
cd /home/minecraft/server/
pwd
スクリプトの始めに