从脚本在终端中打开屏幕进程

从脚本在终端中打开屏幕进程

我有一个在屏幕上运行的 Minecraft 服务器,现在,它只是一个启动 java 的脚本,如下所示:

screen -dmS mc java -Xincgc -Xms1024M -jar craftbukkit-1.6.4-b2882.jar

基本上,这只是在后台的屏幕容器中启动 Minecraft,我可以screen -r mc通过 SSH 访问它。然而,我想做的是让该进程始终在服务器监视器上运行,并且也可以通过 ssh 访问screen -x mc。另外,我有一个 restart.sh 脚本,每两个小时将 stop 命令填充到 mc 进程,然后执行 start.sh 脚本。服务器处于运行级别 3,所以我认为不会gnome-terminal -e "screen -x mc"工作。另外,重启脚本似乎是在屏幕之外启动 mc。当我通过 SSH 连接到服务器时,screen -ls没有显示任何内容,但我的世界服务器进程正在运行并且我可以连接到它。这是脚本:

#!/bin/sh

screen -x mc
screen -s mc stuff "say Server Restarting in 15 minutes."
screen -s mc -X eval "stuff \015"
sleep 600
screen -x mc
screen -x mc -X stuff "say Server restarting in 5 minutes."
screen -s mc -X eval "stuff \015"
sleep 240
screen -x mc
screen -s mc -X stuff "say Server restarting in 1 minute."
screen -s mc -X eval "stuff \015"
sleep 60
screen -S mc -X stuff "say Server restarting."
screen -S mc -X eval "stuff \015"
screen -S -X stuff "kickall Server Restarting, it should be back up in about a minute."
screen -S mc -X eval "stuff \015"
sleep 2
screen -S mc -X stuff "stop"
screen -S mc -X eval "stuff \015"
sleep 30
screen -wipe
sleep 3
cd /minecraft/server/craftbukkit
./start.sh

有任何想法吗?

答案1

这有四个部分。

  1. GNUscreen
  2. 启动 Minecraft 并在它死掉时重新启动它的脚本(例如调用它start-minecraft.sh
  3. start-minecraft.sh用于在屏幕内运行该脚本的启动时脚本。它应该使用su或在拥有屏幕会话和 minecraft 服务器进程的 uid 下sudo运行。start-minecraft.sh这可以从 /etc/inittab 或 /etc/rc.local 等运行。
  4. 一个 cron 作业每两个小时杀死一次我的世界服务器。

start-minecraft.sh应该是一个简单的《minecraft》无限循环包装器,在 mc 重新启动之间可能有一个短暂的睡眠。该脚本的简约版本如下所示:

#! /bin/sh

# set PATH and other env variables here, if required
# ...

while true; do
   java -Xincgc -Xms1024M -jar craftbukkit-1.6.4-b2882.jar
   sleep 30
done

要在 内部运行该脚本screen,一种方法是这样的:

screen -d -RR minecraft -t minecraft /path/to/start-minecraft.sh

如果存在,则告诉它screen附加到名为“minecraft”的现有屏幕会话,如果不存在,则创建一个以该名称命名的新会话,然后在屏幕内创建一个标题为“minecraft”的单个选项卡并在其中运行start-minecraft.sh脚本。

如果用户运行的屏幕有一个~/.screenrc文件,您可能还想使用屏幕的-c选项使用无配置文件或自定义文件来覆盖该文件 - 例如screen -c /dev/null ...

这将我们带到了启动屏幕的第二种方式。为我的世界创建一个自定义.screenrc文件,其中包含以下两行:

screen -t bash  1 bash
screen -t minecraft  0 /path/to/start-minecraft.sh 

这将在屏幕内创建两个“窗口”,一个运行 bash,另一个运行 minecraft。它最后在窗口 0 上启动 Minecraft,因此当您连接到它时,它将是第一个显示的窗口。

无论您使用哪种方法启动 screen,您都可以稍后使用 手动附加到此 screen 会话(例如从您的终端或通过 ssh 连接)screen -d -RR minecraft

后者(自定义 ~/.screenrc)方法是首选。如果它start-minecraft.sh死掉了(例如,因为您杀死了它以使minecraft服务器暂时离线),您可以通过创建一个新的“窗口”screen并手动运行start-minecraft.sh来重新启动它。

相关内容