论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
备份容灾
›
备份
›
用脚本实现Minecraft服务器瓦解自动重启和定时开关,并 ...
用脚本实现Minecraft服务器瓦解自动重启和定时开关,并自动整理日志(自用 ...
东湖之滨
论坛元老
|
2025-2-13 11:35:34
|
来自手机
|
显示全部楼层
|
阅读模式
楼主
主题
1064
|
帖子
1064
|
积分
3196
配景:由于租用的云服务器性能有限,多人联机时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运行。
脚本利用了一段时间,暂未发现问题。观察log文件,发现自动重启也可以或许正常运行。
更新@2024.10.05:
用脚本实现Minecraft服务器日志文件自动合并
Minecraft服务器运行会记录每次运行的日志,日志内容大概如图格式
每次产生新的日志时,旧的日志会被压缩为名字形如2024-09-17-1.log.gz的文件,同一天不同的日志会被保存为不同的文件,如2024-09-17-2.log.gz。压缩后的文件不方便直接查看,且由于MC服务器重启,同一天大概产生多个日志文件,不方便整理。
于是有了下面这个脚本,功能是自动解压日志,保存同一天的日志为一个文件,而且删除模组启动的信息(上图Loading 43 Mods:及厥后之后多少行,即以-或|--或\--开头的内容)、删除不紧张的信息(含有[main/INFO]的内容)
#!/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 '\[main/INFO\]' | \
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企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
东湖之滨
论坛元老
这个人很懒什么都没写!
楼主热帖
《HarmonyOS开发 - 小凌派-RK2206开发 ...
dotnet 6 为什么网络请求不跟随系统网 ...
大二C#实现酒店管理系统(C端展示、前 ...
当我们在聊「开源大数据调度系统Taier ...
VMware虚拟机安装黑群晖7.1
从0到1实现一套CICD流程之CD
函数返回值,静态动态数组
ABP Framework 7.0 RC 新增功能简介 ...
MySQL视图
MySQL8.0 优化器介绍(二)
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
.Net
云原生
信创/国产替代
linux
快速回复
返回顶部
返回列表