用脚本实现Minecraft服务器瓦解自动重启和定时开关,并自动整理日志(自用
配景:由于租用的云服务器性能有限,多人联机时Minecraft服务器经常瓦解,手动重新启动也比力麻烦,于是照着网上的脚本改了一下,实现Minecraft服务器瓦解时自动重启。自用脚本如下
[*]start_mc_server.bash
#!/bin/bash
screen -dmS "mc_server" bash ./screen_mc_server.bash
[*]screen_mc_server.bash
#!/bin/bash
# 进入服务器目录
cd minecraft
while [ true ]; do
# 检查日志目录和文件
if [[ ! -d "logs/mylog" ]]; then
mkdir "logs/mylog";
fi
if [[ ! -f "logs/mylog/running_status.log" ]]; then
touch "logs/mylog/running_status.log";
fi
echo "[$(date +"%Y.%m.%d %T")] Starting" >> logs/mylog/running_status.log
# 启动服务器指令
java -Xmx1024M -jar fabric-server-mc.1.21.1-loader.0.16.5-launcher.1.0.1.jar nogui
# 获取退出状态
exit_code=$?
if [ $exit_code == 0 ]; then
echo "[$(date +"%Y.%m.%d %T")] Stopped" >> logs/mylog/running_status.log
break;
elif [ $exit_code == 1 ]; then
echo "[$(date +"%Y.%m.%d %T")] Stopped and restarting" >> logs/mylog/running_status.log
fi
sleep 10
done
[*]stop_mc_server.bash
#!/bin/bash
SES="mc_server" # 窗口名
if screen -list | grep -q "$SES"; then
echo "发现服务器窗口"
# 检查服务器进程是否存在
if pgrep -f "java" > /dev/null; then
echo "服务器进程存在"
# 输入关服命令
screen -S $SES -p 0 -X stuff "stop^M"
# 循环等待至服务器进程关闭
while pgrep -f "java" > /dev/null; do
sleep 2
done
echo "服务器进程已关闭"
fi
fi
用法:执行start_mc_server.bash即可启动Minecraft服务器,执行stop_mc_server.bash或在游戏中利用stop指令可停止服务器。当服务器非常退出时,会自动重启Minecraft服务器。
定时开关利用crontab -e设置定时执行脚本,根据自己脚本的路径修改。我设置的是每天13:00-23:30运行。
https://i-blog.csdnimg.cn/direct/c443b55079764b09a4137d2004c96978.png#pic_center
脚本利用了一段时间,暂未发现问题。观察log文件,发现自动重启也可以或许正常运行。
https://i-blog.csdnimg.cn/direct/3785f92a230b4d0998c9484142c40c95.png
更新@2024.10.05:
用脚本实现Minecraft服务器日志文件自动合并
Minecraft服务器运行会记录每次运行的日志,日志内容大概如图格式
https://i-blog.csdnimg.cn/direct/f97286a970694141b920a2d34c23dd7e.png#pic_center
每次产生新的日志时,旧的日志会被压缩为名字形如2024-09-17-1.log.gz的文件,同一天不同的日志会被保存为不同的文件,如2024-09-17-2.log.gz。压缩后的文件不方便直接查看,且由于MC服务器重启,同一天大概产生多个日志文件,不方便整理。
于是有了下面这个脚本,功能是自动解压日志,保存同一天的日志为一个文件,而且删除模组启动的信息(上图Loading 43 Mods:及厥后之后多少行,即以-或|--或\--开头的内容)、删除不紧张的信息(含有的内容)
#!/bin/bash
# 设置日志目录
LOG_DIR="/root/minecraft/logs"
# 进入输出路径
cd /home/kodbox/mc_logs
# 遍历所有 .log.gz 文件
for log_file in "$LOG_DIR"/*.log.gz; do
if [[ -f "$log_file" ]]; then
# 提取日期部分
DATE=$(basename "$log_file" | cut -d'-' -f1-3)
OUTPUT_FILE="${DATE}_logs.log"# 根据日期命名输出文件
# 解压并过滤内容,追加到对应的日期文件
gunzip -c "$log_file" | \
grep -v '\' | \
sed '/^[[:space:]]*\(|--\|\\--\|-\)/d' >> "$OUTPUT_FILE"
chmod 777 $OUTPUT_FILE # 修改日志文件的权限
fi
done
# 移动已经复制的日志到备份文件夹
mv $LOG_DIR/*.log.gz $LOG_DIR/backup/
这里还额外添加了修改文件权限的指令,将日志存放在可道云路径,便于通过浏览器查看。最后将执行脚本写在crontab中,每天服务器关闭后执行,可以保存前一天的日志。
紧张参考:
[*]How do I automatically restart a Minecraft Spigot server in the event of a crash or /stop when using screen? - stackoverflow
[*]定时启停MC游戏服务器 - CSDN博客
常用页面备忘:
[*]server.properties - Minecraft Wiki
[*]Linux下令搜索
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]