SameOS ~/tools/palworld-server-operations.md

팰월드 서버 직접 만들기 2탄 - 저장 함정, 안전한 종료, 백업

작성일 2026-07-13 · SameOS Tools

1탄에서 팰월드 서버를 열어 친구들이 접속하는 데까지 했습니다. 이번 글은 운영하면서 실제로 겪은 함정 세 가지입니다 - 설정 파일을 고치다 서버가 설정을 잃는 문제, 잘못 끄면 게임 진행이 날아가는 문제, 그리고 사고에 대비하는 백업. 셋 다 미리 알면 5분이면 막을 수 있는데, 모르면 월드가 통째로 날아갈 수도 있는 것들입니다.

설정 파일을 고칠 때 소유권 함정

월드 설정(배율, 인원 등)은 데이터 폴더 안 Saved/Config/LinuxServer/PalWorldSettings.ini 파일에 있습니다. 함정은 이 파일을 컨테이너 내부 계정이 자기 소유(권한 600 - 소유자만 읽고 쓸 수 있는 상태)로 관리한다는 점입니다. 터미널에서 파일을 새로 만들어 교체(cp, mv)하면 소유자가 내 계정으로 바뀌어 서버가 설정을 못 읽거나 다음 실행에서 초기화될 수 있습니다. 기존 파일에 내용만 덮어쓰면(cat new.ini > PalWorldSettings.ini) 소유권이 보존됩니다. 변경은 재시작해야 적용되고, 고치기 전에 복사본을 만들어 두면 잘못됐을 때 바로 되돌릴 수 있습니다.

끌 때는 반드시 저장부터 - SIGTERM 함정

가장 크게 데일 수 있는 부분입니다. 팰월드 서버의 기본 실행 스크립트는 종료 신호(SIGTERM - 리눅스가 프로그램에 "정리하고 끝내라"고 보내는 신호)를 게임에 제대로 전달하지 않아, 이미지 구성에 따라 docker stop이 저장 없는 강제 종료가 될 수 있습니다. 저는 실제로 마지막 자동 저장 이후의 진행이 날아가는 일을 겪었습니다. 쓰는 이미지가 안전 종료를 지원하는지 문서에서 확인하되, 어떤 이미지든 가장 확실한 방법은 종료 전에 직접 저장하는 것입니다. 안전한 순서는 공지 → 저장 → 종료입니다. 아래 명령은 서버 터미널에서 입력하며, 마지막 shutdown은 대기 시간을 받아 접속 중인 친구들이 마음의 준비를 할 시간도 줍니다.

# 0) 작업 폴더로 이동해 .env에 적어 둔 비밀번호 불러오기
cd ~/palworld
export $(grep -v '^#' .env | xargs)

# 1) 접속자에게 공지
curl -u admin:$ADMIN_PASSWORD -H "Content-Type: application/json" \
  -d '{"message":"5분 뒤 서버를 재시작합니다"}' \
  http://127.0.0.1:8212/v1/api/announce

# 2) 월드 저장
curl -u admin:$ADMIN_PASSWORD -X POST http://127.0.0.1:8212/v1/api/save

# 3) 30초 대기 후 종료 - docker stop으로 바로 끄면 저장이 날아감
curl -u admin:$ADMIN_PASSWORD -H "Content-Type: application/json" \
  -d '{"waittime":30,"message":"서버를 종료합니다"}' \
  http://127.0.0.1:8212/v1/api/shutdown

자동 백업과 compose 함정 하나

백업은 월드 저장 폴더(SaveGames)를 tar(여러 파일을 하나로 묶는 리눅스 기본 명령)로 묶어 두는 것으로 충분합니다. cron(리눅스 내장 예약 실행 기능)에 하루 한 번 등록하고 오래된 백업은 자동 삭제합니다. 그리고 compose 함정 하나 - 같은 compose 파일에 관리용 보조 컨테이너를 두면서 게임 서버에 depends_on(저 컨테이너를 먼저 켜라는 의존 선언)을 걸면, 보조 컨테이너를 다시 올릴 때 일부러 꺼둔 게임 서버까지 몰래 살아납니다. 실제로 겪고 나서 뺐습니다. restart: unless-stopped 정책이면 크래시는 자동 복구되면서 수동으로 끈 상태는 존중됩니다.

#!/bin/bash
# 백업 스크립트 - cron에 하루 1회 등록 (예: 15 5 * * *)
cd "$HOME/palworld"
mkdir -p backups
tar czf backups/world-$(date +%Y%m%d-%H%M).tar.gz \
  -C palworld-data/Pal/Saved SaveGames
find backups -name 'world-*.tar.gz' -mtime +14 -delete   # 14일 지난 백업 삭제

이 세 가지만 갖추면 몇 주를 돌려도 사고가 없습니다. 다만 저장·재시작 때마다 터미널에서 명령을 치는 건 여전히 귀찮습니다. 3탄에서는 이걸 브라우저 버튼 하나로 바꿔 주는 관리 페이지를 직접 만듭니다.

GitHub에서 전체 예제 코드 보기 →

← 1탄: 리눅스에 서버 열기 다음 글: 3탄 - 브라우저 관리 페이지 →