Fedoraでpidを使用してJavaプロセスの.shを呼び出す方法

Fedoraでpidを使用してJavaプロセスの.shを呼び出す方法

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

スクリプトの始めに

関連情報