Minecraft 开服记录 & 自动备份

您所在的位置:网站首页 我的世界java如何打开备份存档 Minecraft 开服记录 & 自动备份

Minecraft 开服记录 & 自动备份

2024-06-29 01:31| 来源: 网络整理| 查看: 265

似乎少有关于 minecraft 自动备份的脚本,在此记录一下比较野鸡的方法。如果有更好的方法请告诉我!

一、开服

MC开服一直都比较简单,以fabric为例只需要打开链接,选择好对应版本,然后下载即可。开服的指令网页里也准备好了,即 java -Xmx2G -jar XXX.jar nogui 那句指令。先运行一遍,会自动生成 eula.txt 文件,打开将里面的 false 改为 true 再重新输入开服指令即可。

二、自动备份 2.1 手工备份

先讲手工备份的方法。

有很多教程直接对 world 文件夹进行归档,然而这是存在一定的风险的,因为你在归档的同时服务器仍在运行,归档有可能是残缺的。

一个土办法是 关服-归档-再开服,但是频繁的开服关服说实话很烦,不知道有没有人用。。。。。

正确的方法是输入服务端指令 /save-off 停止自动存档,接着 /save-all 保存所有内容,接着归档,再接着 /save-on 打开自动存档。

自动备份就是简单地对于手工备份过程的自动化,并没有太多难度。。。。?

2.2 命名管道

然而仍然有一个问题困扰了我许久,就是如何在服务端后台运行的同时向其发送指令。不过后来我醒悟了,这个可以用命名管道来实现。

首先我们通过指令创建一个命名管道 mkfifo mc.fifo,然后再将其通过管道传递给服务端,即将开服指令更改为

tail -f mc.fifo | java -Xmx2G -jar XXX.jar nogui > log.log

2.3 自动脚本

有了管道就可以自由地写脚本了,这里是我写的自动备份脚本,每5分钟检测一次服务器是否有人,有人时每20分钟自动备份一次。代码非常简单就不详细介绍了。 backup.sh

mkdir backup backup_num=10 #保留10个备份 savestate=0 while true; do sleep 5m #每五分钟检查一次是否有人 echo "list" >mc.fifo latest=$(tail -1 log.log) if [[ ${latest:33:11} == "There are 0" ]]; then haspeople=0 else haspeople=1 savestate=1 echo "say Start auto-backup service" >mc.fifo fi if [ $savestate -eq 1 ]; then { echo "say Begin Backup" echo save-off echo save-all tar -cf backup/$(date +%Y%m%d_%H%M%S).tar.gz world echo save-on echo "say Backup Completed" } >mc.fifo #一次备份 cd backup dir_num=$(ls -l | wc -l) if [ $dir_num -gt $backup_num ]; then #删除过旧的备份 num=$(expr $dir_num - $backup_num) ls -tr | head -$num | xargs -i -n1 rm {} fi cd .. if [ $haspeople -eq 0 ]; then #若没人则停止备份 savestate=0 echo "say Stop auto-backup service since no player" >mc.fifo fi sleep 15m #每次备份至少间隔 20分钟 fi done


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3