我正在尝试设置 Minecraft 服务器。然而,提供的基本启动脚本不符合我的需求。我想要一个脚本,它将:
- 启动一个新的
screen
运行 jarfile 和(几乎)仅 jarfile(这样我可以在需要时^C
它而不杀死 screen 或我的 gzip 命令等其他东西) - Gzip 未由 jar 文件自动 gzip 压缩的任何日志(如果/当我
^C
'ed 服务器时,或者服务器崩溃时) - 使用
sudo
运行命令,将第一个参数中的进程设置为高优先级 (/usr/bin/oom-priority
) - 在不同
screen
的resource-pack
目录上运行http-server
,并在服务器关闭时向其发送^C
我有这三个命令。我运行 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
文件错误(我期待这些错误,但是当我运行startserver
时,我应该得到java程序)。不知何故,我处于一个 screen
中,因为当我执行^A d
时,我会看到一个新的提示。
一旦我离开 screen ,screen -ls
就会返回 my-mc-server
的两个实例。一种是空白的命令提示符,另一种是服务器运行成功。
编辑 2: 我更改了 startserver_command 以从 env MC_PID=$! 中删除星号! &
(那里不需要)并将其添加到 (sleep 1; startserver_after)
(使其更快),将 env
行重定向到 /dev/null
(删除输出开头的整个环境列表)。仍然没有解决整个问题。
最佳答案
您可以使用自定义的 .screenrc 来指定一些启动窗口(并运行命令/脚本),而不是从脚本启动每个 screen session :
#$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'
然后只需启动 screen (指定要使用的配置文件,如果它不是默认的 ~/.screenrc)
screen -dm -c mc-server.screenrc
关于linux - 服务器启动脚本问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23875425/