本帖最后由 flashlab 于 2020-4-13 21:02 编辑
每天自动备份worlds文件夹,方便回档

这里用的是pm2后台管理服务进程,算是screen之外又一个选择吧。
因为是
bdlauncher启动的,所以停服是通过向进程发送stop命令,官服的话直接pm2 stop 0即可
上脚本
- #!/bin/bash
- #启动命令:pm2 start -x "./bdlauncher" --restart-delay=10000 -n mc
- #需要备份的世界名,多个文件夹用空格分开
- WDLEVEL='zzbd default'
- #pm2进程ID
- PID=0
- #备份路径(当前目录)
- BACKPATH=$(dirname $(readlink -f $0))
- #准备目录
- WDPATH="${BACKPATH}/worlds"
- BKPATH="${BACKPATH}/bak"
- [ ! -d "${WDPATH}" ] && exit 1
- [ ! -d "${BKPATH}" ] && mkdir -p "${BKPATH}"
- #停止服务器
- pm2 send $PID "stop" 2>> ${BKPATH}/worldbak.log
- [ $? -ne 0 ] && { echo "服务器通信异常!! 中止.." >> ${BKPATH}/worldbak.log; exit 1; }
- echo "备份时间为 `date +%Y-%m-%d/%H:%M:%S`,备份level为 ${WDLEVEL}" >> ${BKPATH}/worldbak.log
- #检查服务器是否关闭
- sleep 3
- NEXT_WAIT_TIME=0
- until [ "$(pm2 ls $PID -m | grep -c "status : waiting restart")" -ge 1 ] || [ $NEXT_WAIT_TIME -eq 4 ]; do
- sleep $(( NEXT_WAIT_TIME++ ))
- done
- [ $NEXT_WAIT_TIME -eq 4 ] && { echo "服务器关闭失败!! 中止.."; exit 1; }
- #正式备份
- cd ${BKPATH}
- for x in $WDLEVEL; do
- #世界不存在跳过
- [ ! -d "${WDPATH}/${x}" ] && continue
- #存档数据未更新跳过
- currtime=`date -r ${WDPATH}/${x} +%Y-%m-%d_%H%M%S`
- [ -n "`find -maxdepth 1 -name "${x}*.tar.gz"`" ] && lastime=`ls -t ${x}*.tar.gz | head -1` || lastime=''
- [ "${lastime}" == "${x}${currtime}.tar.gz" ] && continue
- #压缩文件夹
- tar fczP ${x}latest.tar.gz ${WDPATH}/${x} > /dev/null
- echo "世界 ${x} 备份$([ $? -eq 0 ] && echo "成功" || echo "失败")!!" >> worldbak.log
- #只保存前三个备份
- ls -A1t $(find -name "${x}*.tar.gz" -type f) | tail -n +4 | xargs rm > /dev/null 2>&1
- done
- #检查服务器是否重启
- sleep 5
- NEXT_WAIT_TIME=0
- until [ "$(pm2 ls $PID -m | grep -c "status : online")" -ge 1 ] || [ $NEXT_WAIT_TIME -eq 4 ]; do
- sleep $(( NEXT_WAIT_TIME++ ))
- done
- [ $NEXT_WAIT_TIME -eq 4 ] && { echo "服务器重启失败!! 中止.."; exit 1; }
- #备份文件名修改为当前存档时间戳
- for x in $WDLEVEL; do
- [ ! -f "${x}latest.tar.gz" ] && continue
- currtime=`date -r ${WDPATH}/${x} +%Y-%m-%d_%H%M%S`
- mv -f ${x}latest.tar.gz ${x}${currtime}.tar.gz
- done
复制代码 放到服务器根目录,通过crontab每天自动执行,然后可以愉快的关掉作弊选项了
|
2020.4.13更新
增加三种模式,冷备份(备份时服务器会重启),热备份,游戏内控制台输入关键词触发备份,上脚本
欢迎大佬指正