来唠嗑儿啊~

Linux 下自动备份我的世界基岩版服务器的世界

  最近开了个我的世界基岩版的服务器团建用,由于不能保证每个用户都是那么善良,所以有自动备份世界的需要。

  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 即可,正则表达式可以通过网上的工具生成。

Previous

Linux 普通用户绑定特权端口

Next

PC原神更新跳过资源完整性检查

1 Comment

  1. Outstanding post, I believe people should larn a lot from this web site its very user friendly. So much great information on here :D.

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

Copyright © 2022-2023 earthjasonlin 摸鱼站萌ICP备20231331号