最近开了个我的世界基岩版的服务器团建用,由于不能保证每个用户都是那么善良,所以有自动备份世界的需要。
MC 服务器本身提供了在 console 中通过指令备份世界,但由于我是用nohup
命令启动的,又因为本人是条咸鱼,懒得去研究如何向nohup
运行的应用做标准输入(stdin),所以就选择了在夜深人静的时候 kill 掉服务器,手动打包再重新启动服务器。
通过上面的思路,分为两个大模块:脚本和定时执行。
1 脚本
1.1 找到并杀死服务器进程
# 获取 bedrock_server 进程的 pid
ID=`ps -ef | grep bedrock_server | grep -v grep | awk '{print $2}'`
# 杀死进程
for id in $ID
do
kill -9 $id
done
1.2 打包备份世界
通过观察目录结构可以知道,世界都被存储在 worlds 目录下,所以只需要将整个 worlds 目录打包即可。
# 创建一个备份文件夹
if [ ! -d "backups" ]
then
mkdir backups
fi
# 获取当前时间并创建备份
time=$(date +%Y-%m-%d_%H-%M-%S)
tar -zcvf ./backups/worlds-${time}.tar worlds
1.3 启动服务器
# 此处即使在root用户下如果不用sudo也会报命令找不到
nohup sudo LD_LIBRARY_PATH=. ./bedrock_server &
1.4 脚本整合
time=$(date +%Y-%m-%d_%H-%M-%S)
cd /root/bedrock-server
# find bedrock_server process and kill
ID=`ps -ef | grep bedrock_server | grep -v grep | awk '{print $2}'`
for id in $ID
do
kill -9 $id
done
# create backup dir
if [ ! -d "backups" ]
then
mkdir backups
fi
# create backup
tar -zcvf ./backups/worlds-${time}.tar worlds
# start server
nohup sudo LD_LIBRARY_PATH=. ./bedrock_server &
2 定时执行
定时执行通过系统自带 crontab 即可,正则表达式可以通过网上的工具生成。
发表回复
要发表评论,您必须先登录。