
마인크래프트 서버를 시작하고 싶습니다. 그래서 .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
스크립트 시작 부분에