我正在尝试设置Minecraft服务器。但是,提供的基本启动脚本不符合我的需要。我想要一个脚本:
screen
和(几乎) jar文件(如果需要,我可以^C
其他的东西,如屏幕或我的gzip命令)^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)
(删除输出开头的整个环境列表)。仍然没有解决整个问题。
答案 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