월드 자동 백업
백업 스크립트 작성
섹션 제목: “백업 스크립트 작성”서버에 백업 스크립트를 만든다.
sudo vim /root/backup.sh아래 내용을 파일에 붙여 넣고 필요에 맞게 고친다(Linux 초보라면 건드리지 않는 편이 낫다).
#!/bin/bash
usage() { echo "사용법: $0 --server-dir <서버 경로> --backup-dir <백업 저장 디렉터리> [--max-backups <최대 백업 파일 수>]" echo "인자:" echo " --server-dir, -s: 서버 디렉터리 (절대 경로)" echo " --backup-dir, -b: 백업 저장 디렉터리 (절대 경로)" echo " --max-backups, -m: 최대 백업 파일 수, 선택 (기본값: 5)" exit 1}
PARSED_ARGUMENTS=$(getopt -n "$0" -o s:b:m: --long server-dir:,backup-dir:,max-backups: -- "$@")if [ $? -ne 0 ]; then usagefi
eval set -- "$PARSED_ARGUMENTS"
while true; do case "$1" in -s|--server-dir) SERVER_DIR=$2 shift 2 ;; -b|--backup-dir) BACKUP_DIR=$2 shift 2 ;; -m|--max-backups) MAX_BACKUPS=$2 shift 2 ;; --) shift break ;; *) usage ;; esacdone
# 필수 인자가 주어졌는지 확인if [ -z "$SERVER_DIR" ] || [ -z "$BACKUP_DIR" ]; then usagefi
# SERVER_DIR/server.properties가 있는지 확인if [ ! -f "$SERVER_DIR/server.properties" ]; then echo "$SERVER_DIR/server.properties 파일이 없다" exit 1fi
# 백업 저장 디렉터리가 있는지 확인if [ ! -d "$BACKUP_DIR" ]; then echo "백업 저장 디렉터리 $BACKUP_DIR 가 없어 새로 만든다" mkdir -p $BACKUP_DIR || exit 1fi
# 최대 백업 파일 수가 양의 정수인지 확인if [ -z "$MAX_BACKUPS" ]; then MAX_BACKUPS=5elif ! [[ "$MAX_BACKUPS" =~ ^[1-9][0-9]*$ ]]; then echo "최대 백업 파일 수는 양의 정수여야 한다" exit 1fi
# 월드 백업SERVER_PARENT_DIR=$(dirname $SERVER_DIR)SERVER_NAME=$(basename $SERVER_DIR)cd $SERVER_PARENT_DIR || exittime=$(date "+%Y%m%d-%H%M%S")tar -czvf "${time}.tar.gz" $SERVER_NAMEmv "${time}.tar.gz" $BACKUP_DIR
# 오래된 백업 파일 삭제cd $BACKUP_DIR || exittar_gz_files=($(ls -t *.tar.gz))if [ ${#tar_gz_files[@]} -gt $MAX_BACKUPS ]; then rm "${tar_gz_files[${#tar_gz_files[@]}-1]}"fiEsc를 누르고 영문 입력 상태에서 :wq를 입력해 저장하고 나간다.
백업 스크립트를 예약 작업에 등록
섹션 제목: “백업 스크립트를 예약 작업에 등록”crontab을 편집한다.
crontab -e파일 끝에 다음 내용을 추가한다.
0 3 * * * /bin/bash /root/backup.sh -s /path/to/server -b /path/to/backup -m 5# 서버가 여러 대라면 백업 작업을 여러 개 추가하면 된다# 0 3 * * * /bin/bash /root/backup.sh -s /path/to/server2 -b /path/to/backup2 -m 5# 0 3 * * * /bin/bash /root/backup.sh -s /path/to/server3 -b /path/to/backup3 -m 5# 이하 같은 방식...각 항목은 다음과 같다.
/path/to/server: 서버 디렉터리의 절대 경로로 바꾼다./path/to/backup: 백업 저장 디렉터리의 절대 경로로 바꾼다.5: 최대 백업 파일 수.
서버 디렉터리의 절대 경로는 어떻게 알 수 있을까? 해당 디렉터리에서
pwd명령을 실행하면 현재 디렉터리의 절대 경로가 나온다.
위 예시는 매일 새벽 3시에 백업 스크립트를 실행한다. 여기서 0 3 * * *가 cron 표현식이다.
자주 쓰는 cron 표현식 몇 가지를 소개한다.
0 3 * * *: 매일 새벽 3시0 3 * * 0: 매주 일요일 새벽 3시0 3 1 * *: 매월 1일 새벽 3시0 3 * * 1: 매주 월요일 새벽 3시0 3 * * 1,3,5: 매주 월, 수, 금요일 새벽 3시0 3 * * 1-5: 매주 월요일부터 금요일까지 새벽 3시0 3 * * 1-5: 매주 월요일부터 금요일까지 새벽 3시
백업 복원
섹션 제목: “백업 복원”- 복원할 백업 파일을 고른다.
- 백업 파일의 압축을 푼다:
tar -zxvf 백업파일명.tar.gz - 압축을 푼 파일을 서버 디렉터리에 덮어쓴다:
cp -r 압축푼경로/* 서버디렉터리
복원 후 서버를 켰을 때 다음 오류가 난다면:
[main/FATAL]: Failed to start the minecraft server net.minecraft.util.SessionLock$ExceptionWorldConfict: /home/minecraft/lobby/./world/session.lock: already locked (possibly by other Minecraft instance?)
world폴더에session.lock파일이 있는지 확인하고, 있으면 지운 뒤 서버를 다시 켠다.