Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 通过屏幕会话在while循环中运行Minecraft的问题_Bash_While Loop_Sh_Minecraft - Fatal编程技术网

Bash 通过屏幕会话在while循环中运行Minecraft的问题

Bash 通过屏幕会话在while循环中运行Minecraft的问题,bash,while-loop,sh,minecraft,Bash,While Loop,Sh,Minecraft,所以今天早些时候,我更改了我的minecraft服务器的启动脚本。问题是,大约3小时后,打开的屏幕消失,并且在使用-ls时拒绝显示。服务器仍在运行,从下面我可以看到,屏幕进程应该仍然处于活动状态? ServerStart.sh在init期间被调用。最初只包含while循环 ServerStart.sh: #/bin/bash #Check to see if a minecraft screen is already running lineCount=`screen -r mc | g

所以今天早些时候,我更改了我的minecraft服务器的启动脚本。问题是,大约3小时后,打开的屏幕消失,并且在使用
-ls
时拒绝显示。服务器仍在运行,从下面我可以看到,屏幕进程应该仍然处于活动状态?
ServerStart.sh
init
期间被调用。最初只包含while循环

ServerStart.sh

#/bin/bash    
#Check to see if a minecraft screen is already running
lineCount=`screen -r mc | grep "There is no screen to be resumed matching mc." | wc -l`

#Start the minecraft server in a detached screen named "c" if its not running
#Launch the command line interface for minecraft if it is arealdy running.
if [ $lineCount -eq 1 ]
  then
    echo linecount: $lineCount. Starting in a deteched screen named minecraft. Use screen -r minecraft to view.
    screen -dmS mc sh ServerLoop.sh
  else
    echo lineCount: $lineCount. Minecraft is already running. Use screen -r minecraft to view. Running now.
    screen -r mc
fi
#/bin/bash
while true
do
java -server -Xms4096m -Xmx16384m -XX:PermSize=512m -d64 -XX:+UseParNewGC -XX:+CMSIncrementalPacing -XX:+CMSClassUnloadingEnabled -XX:ParallelGCThreads=2 -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10 -jar FTB.jar nogui
echo Restarting-Give me 90 Seconds.
sleep 10
done
ServerLoop.sh

#/bin/bash    
#Check to see if a minecraft screen is already running
lineCount=`screen -r mc | grep "There is no screen to be resumed matching mc." | wc -l`

#Start the minecraft server in a detached screen named "c" if its not running
#Launch the command line interface for minecraft if it is arealdy running.
if [ $lineCount -eq 1 ]
  then
    echo linecount: $lineCount. Starting in a deteched screen named minecraft. Use screen -r minecraft to view.
    screen -dmS mc sh ServerLoop.sh
  else
    echo lineCount: $lineCount. Minecraft is already running. Use screen -r minecraft to view. Running now.
    screen -r mc
fi
#/bin/bash
while true
do
java -server -Xms4096m -Xmx16384m -XX:PermSize=512m -d64 -XX:+UseParNewGC -XX:+CMSIncrementalPacing -XX:+CMSClassUnloadingEnabled -XX:ParallelGCThreads=2 -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10 -jar FTB.jar nogui
echo Restarting-Give me 90 Seconds.
sleep 10
done

由于在记事本++中编写脚本,在通过ftp传输时,我似乎得到了^M的随机添加。但是,它们并没有被添加到每一次代码修订中,所以这不是一件一致的事情。然而,他们停止了start.sh的运行,却没有给出任何真正的原因

为了供其他人参考,在过去的48小时内,在2台不同的服务器上,以下内容在多次每日重启过程中运行良好。希望其他人会发现这很有用,无论是用于Minecraft还是其他类似的任务

ServerStart.sh

#/bin/bash
屏幕-dmS infitech sh./start.sh
屏幕-r infitech

start.sh

#/bin/bash
虽然是真的
做
java-Xms8192m-Xmx10240m-XX:PermSize=512m-jarserver-1.7.10-1403.jar nogui-Dfml.queryResult=confirm
echo“随意按CTRL+C停止服务器”
睡眠10

完成

第一次运行ServerStart.sh后您会做什么?运行
screen-r mc
,再次运行
ServerStart.sh
,还是让屏幕会话暂停三个小时?ServerStart.sh应该启动我的mc屏幕并运行ServerLoop.sh,由于'while true'语句,它应该使我的服务器永远处于活动状态,并且控制台可以通过屏幕会话查看,对吗?我无法理解为什么我的屏幕会话消失了。。现在我有了一个不会死机的服务器,因为每当我试图停止它时它就会重新启动(试图避免只是强制关闭),因为我无法停止ServerLoop.sh。这根本不能回答我的问题。在它在init上运行之后,我希望永远不会再运行与它相关的任何东西,除非我通过screen-r mc检查它。我的会议被附加了,当我回家时,它不是。。服务器在没有控制台的情况下一直在运行。好吧,如果三个小时内没有连接任何东西,如果服务器的输出无处显示,则可能是缓冲区溢出,屏幕进程退出或崩溃。如果情况并非如此,并且您没有重新运行SeverStart.sh(它可能无法正确处理此情况),我不知道是什么导致了此问题。您可以通过先终止重启java进程的bash进程来停止java进程。bash进程将是java进程的父进程。