服务器启动脚本问题

时间:2014-05-26 17:51:08

标签: linux bash minecraft gnu-screen

我正在尝试设置Minecraft服务器。但是,提供的基本启动脚本不符合我的需要。我想要一个脚本:

  • 开始运行jar文件的新screen和(几乎) jar文件(如果需要,我可以^C其他的东西,如屏幕或我的gzip命令)
  • Gzip任何没有被jar文件自动gzip压缩的日志(if if / when i ^C'ed ed the server,或者是否崩溃了)
  • 使用sudo运行命令,将第一个参数中的进程设置为高优先级(/usr/bin/oom-priority
  • 在另一个http-server的{​​{1}}目录中运行resource-pack,并在服务器关闭时向其发送screen

我有这三个命令。我运行^C来启动服务器。

startserver

startserver

#!/bin/bash set -m cd /home/minecraftuser/server/ echo screen -dm -S http-server http-server ./resource-pack screen -dm -S my-mc-server startserver_command (sleep 1; startserver_after) & screen -S my-mc-server

startserver_command

#!/bin/bash set -m cd /home/minecraftuser/server/ echo java -Xmx768M -Xms768M -jar ./craftbukkit.jar $@ & env MC_PID=$! > /dev/null (sleep 0.5; sudo /usr/bin/oom-priority $MC_PID) & fg 1 echo read -n 1 -p 'Press any key to continue...'

startserver_after

编辑:当我运行#!/bin/bash cd /home/minecraftuser/server/ wait $MC_PID find /home/minecraftuser/server/logs -type f -name "*.log" -print | while read file; do gzip $file & done screen -S http-server -p 0 -X stuff \^c\\r 时,我收到一个命令提示符,然后出现了一堆startserver个已存在的文件错误(我期待这些错误,但是当我运行gzip我应该得到java程序)。不知怎的,我在startserver,因为当我screen时,我被带到一个新的提示。 一旦我离开屏幕,^A d将返回screen -ls的两个实例。一个是空白命令提示符,另一个是服务器成功运行。

编辑2:我更改了startserver_command以从my-mc-server删除星号(不需要)并将其添加到env MC_PID=$! &(使其更快),重定向{{1行到(sleep 1; startserver_after)(删除输出开头的整个环境列表)。仍然没有解决整个问题。

1 个答案:

答案 0 :(得分:1)

您可以使用自定义.screenrc指定一些启动窗口(以及运行命令/脚本),而不是从脚本启动每个屏幕会话:

#$HOME/mc-server.screenrc
screen -t http-server 0 'startserver'
screen -t my-mc-server 1 'startserver_command'
screen -t gzip-logs 2 'startserver_after'

然后只需启动屏幕(指定要使用的配置文件,如果它不是默认的〜/ .screenrc)

screen -dm -c mc-server.screenrc