팰월드 서버에 플레이어가 있는지 확인하여 없으면 서버를 정지 상태로 변경하여 시간이 흐르지 않도록 하는 기능입니다. 이후 플레이어가 접속하면 서버를 자동으로 재시작합니다. 디스코드와의 연동하여 디스코드로 서버를 실행, 정지, 상태확인이 가능합니다.
플레이어 없을 때 서버 정지
팰월드에서는 플레이어가 없을 때도 실시간으로 팰들이 서로 상호 작용하고, 적들이 습격해옵니다. 24시간 서버에서도 마찬가지인데, 사람이 24시간 동안 게임할 수 있는 것도 아니고 플레이어가 적으면 빈 시간이 생기기 마련입니다. 이때 서버를 정지하여 시간이 흐르지 않게 함과 동시에 게임의 메모리 누수를 막을 수 있습니다.
이 방법은 예전 팰월드 서버 플레이어 없을 때 서버 리셋 후 일시 정지 하는 법이라는 글을 통해 소개해드린 적이 있습니다만, 새로 소개해드리는 방법은 Discord로 서버를 여닫는 기능도 존재하고, 현재 서버가 열려있는지 닫혀있는지 확인도 가능합니다.
Palworld-watcher로 서버 감시하기
Docker를 통해 작동하는 이 기능은 처음 docker-compose.yml로 만들 때 함께 구성해서 설치할 수 있습니다. docker-compose.yml를 열어서 내용을 추가하세요.
---
services:
palworld:
image: thijsvanloef/palworld-server-docker:latest
restart: unless-stopped
container_name: palworld-server
network_mode: service:watcher # This is important!
environment:
PUID: 1000
PGID: 1000
PORT: 8211 # Optional but recommended
PLAYERS: 16 # Optional but recommended
SERVER_PASSWORD: "" # Optional but recommended
MULTITHREADING: true
DISABLE_GENERATE_SETTINGS : true
RCON_ENABLED: true
RCON_PORT: 25575
TZ: "UTC"
ADMIN_PASSWORD: "adminPasswordHere"
COMMUNITY: false # Enable this if you want your server to show up in the community servers tab, USE WITH SERVER_PASSWORD!
SERVER_NAME: "NAME SERVER"
SERVER_DESCRIPTION: "palworld-server-docker by Thijs van Loef"
ALLOW_CONNECT_PLATFORM: "Steam" # Defaults to "Steam" if not set, set this to "Xbox" if you want to host a server for Xbox players. CROSSPLAY BETWEEN XBOX-STEAM IS NOT YET SUPPORTED
volumes:
- ./palworld:/palworld/
watcher:
image: dnwjn/palworld-server-watcher:latest
container_name: palworld-watcher
environment:
- CONTAINER_NAME=palworld-server # The name of the server container
- GAME_PORT=8211 # The same value as `PORT` in the server container
- QUERY_PORT=27015 # The same value as `QUERY_PORT` in the server container
- LOOP_SLEEP_SECONDS=30 # How often to check the server status
- CONNECT_GRACE_SECONDS=60 # After starting the server, how long to wait before continuing the loop
- SHUTDOWN_DELAY_SECONDS=300 # How long to wait after the last player leaves to shutdown the server
ports:
- 8211:8211/udp # The same value as `GAME_PORT`
# - 27015:27015/udp # Enable to show up in the server list
volumes:
- /var/run/docker.sock:/var/run/docker.sock # This could be different depending on the operating system
어렵게 생각하지 마세요. 기존 항목에 network_mode: service:watcher
를 추가하고, port
항목과 stop_grace_period
를 제거한 뒤 watcher: 이하를 전부 복사해서 붙여넣으면 됩니다. 아니면 위 코드를 전부 복사하여 붙여넣은 뒤 일부만 변경하셔도 됩니다.
SHUTDOWN_DELAY_SECONDS는 마지막 플레이어가 나가고 몇분 뒤에 서버를 종료할 지 설정하는 기능입니다. 0으로 하면 즉시 서버를 종료해버립니다. 서버 목록에서 보이고 싶다면 # - 27015:27015/udp에서 #을 제거하시길 바랍니다.
설치 방법
팰월드 멀티 서버 24시간 서버 만드는 법으로 설치했다는 가정하에 설명하겠습니다.
sudo chmod +x /usr/local/bin/docker-compose
sudo chmod 666 /var/run/docker.sock
export COMPOSE_FILE=/home/serverfile/docker-compose.yml
sudo docker stop 컨테이너이름
모바엑스텀의 콘솔에 위 코드를 입력하여 docker에 권한을 부여하고 docker-compose.yml 위치 설정을 하고 서버를 정지시킵니다.
서버가 정지되었으면 /home/serverfile/docker-compose.yml를 수정하거나 수정한 파일로 교체합니다.
docker-compose up -d
위 코드를 입력하면 palworld-server와 palworld-watcher가 실행되면서 플레이어 존재여부를 확인하여 서버를 여닫게 됩니다.
Discord로 관리하기
만약 디스코드로 관리하고 싶다면 아래의 방법을 이용합니다.
먼저 https://discord.com/developers/applications로 이동하여 New Application을 만듭니다.
- Bot에서 MESSAGE CONTENT INTENT 활성화 후 Apply.
- OAuth2에서 bot, applications.commands를 체크하고 새로 나타난 항목에서 Send Messages까지 체크한 뒤 Generated URL을 복사하여 빈 주소창에 붙여넣습니다.
- 봇을 상주시킬 서버를 선택합니다.
Docker-Compose.yml 수정
watcher:의 environments 항목에 아래를 추가합니다. 우측 란은 Discord 개발자 항목에서 확인하여 채워넣읍시다.
- DISCORD_TOKEN=OAuth2에서 Client ID 복사.
- DISCORD_CLIENT_ID=Bot에서 Reset Token 선택 후 재생성된 토큰 복사.
- DISCORD_GUILD_ID=디스코드에서 봇이 상주한 서버 우클릭 후 ID 복사. (없으면 사용자 설정→고급→개발자 모드 ON)
설치하기
서버가 켜져있다면 서버를 종료한 뒤 docker-compose up -d를 눌러 설치하면 됩니다. 이후 디스코드 서버에 봇이 상주하게 되고, /start, /stop, /status로 현재 서버 상태를 확인하고 여닫을 수 있습니다.
안녕하세요. 게시글 팰월드 멀티 서버 24시간 서버 만드는 법에 가장 최근 질문 댓글을 올렸구 답변 해주신 명령어인 sudo chmod -R 775 /home/serverfile/palworld/Pal/Saved/SaveGames/0/ 로 인게임 설정을 해서 주말 잘 게임을 했습니다. 감사합니다
그런데 서버에 사람이 없는데 서버가 닫히지 않는다는것을 알게되었습니다.
sudo docker ps를 하면 서버를 열었을때
/home/steam/server/…” 38 hours ago Up 10 seconds (health: starting) palworld-server
/entrypoint.sh” 38 hours ago Up 38 hours 0.0.0.0:8211->8211/udp, :::8211->8211/udp palworld-watcher
로 출력되며 palworld-server , palworld-watcher 모두 작동되고 있는거 확인하였고
모바엑스텀 /home/serverfile/docker-compose.yml 파일에 SHUTDOWN_DELAY_SECONDS=0
으로 바로 꺼지도록 하고 저장 후 docker-compose up -d 입력하여
Container palworld-watcher Started
Container palworld-server Started
또한 확인했습니다.
그런데 다 나가도 서버가 꺼지지 않네요. 이걸 확인한 방법은 팰월드 종료 전 거점 내 자원 상황 등을 파악해 놓고 나간 후 일정 시간이 지나고 서버에 들어갔을때 팰들이 거점 활동을 해서 자원 상황이 바꼈는지를 보고 서버가 아직 켜져있는지 유무를 확인했습니다.
팰월드 서버 플레이어 없을 때 서버 리셋 후 일시 정지 하는 법의 게시물 도움을 받아서
server_restart.py로 서버 종료를 해보려 했는데
이 방법의 경우 사람이 접속해도 있다고 인식을 못하는지 서버를 닫아버립니다.
kill -9로 계속 작동중인 server_restart.py는 종료시킨거 같은데
결국 두가지 방법 모두에서 막혀버렸습니다
어느 부분에서 제가 실수를 한 것일까요? 잘 모르는데 지인들과 서버를 돌리려니 여간 힘든게 아니네요
먼저 서버 생성을 어떻게 하셨는지 과정을 모르므로, 이것만 봐서는 어느 부분에서 실수를 했는지 알 수는 없습니다.
보내주신 sudo docker ps의 내용으로 봐서는 watcher는 잘 돌아가고 있지만 38 hours ago로 뜨는 거로 봐서 서버 종료가 안되고 있는 거는 맞습니다. 하지만 앞서말씀드렸듯 원인을 모르므로 해결 방법도 모릅니다.
시도해볼 수 있는 가장 간단한 방법은
서버 내용 백업 :
/home/serverfile/palworld/Pal/Saved/SaveGames/0/서버 폴더
드래그해서 다른 곳에다 복사
서버 디스크 초기화:
구글 클라우드→VM 인스턴스→이름 클릭→상단의 중지 버튼→수정→부팅 디스크 분리→새 부팅 디스크 작성
좌측 항목에서 스토리지→디스크에서 예전 부팅 디스크를 제거
위 과정으로 백업 및 가상 머신 디스크 초기화 후
✓ 팰월드 멀티 서버 24시간 서버 만드는 법
위 방법에서 제가 제공해드린 docker-composed.yml 파일로 다시 서버를 생성하고,
✓ 팰월드 기존 서버 정보를 새 서버에 덮어 씌우는 방법
이 방법으로 서버를 덮어 씌워서 다시 실행해보시길 바랍니다.
마지막으로 자원 상황이 바뀌었는지 확인하지 말고 서버를 생성하고 일정 시간 뒤에 sudo docker ps를 사용하여 palworld-server가 사라졌는지 남아있는지 체크하는 방식으로 테스트하시면 편합니다.
정리 너무 잘해주셔서 차근차근 따라해보고있습니다! 다른 서버들 보니까 4시 6시 12시 이런식으로 자동리부팅 되게끔 되어있던데 혹시 그런건 어떻게 하는건지 또 포스트 올려주실 수 있을까요 @_@
작성했습니다.^^ 팰월드 서버 특정 시간마다 백업 및 재시작하는 방법 참고해주시길 바랍니다.
[Palworld-watcher로 서버 감시하기] 까지 따라했는데, [설치 방법] 도 진행해야 하는 건가요?
따라해보려고 했는데 ‘서버명’을 적는곳에 제 서버명을 적었더니
예를들면 서버명이 RAINBOW WORLD이면,
RAINBOW WORLD도 쳐보고 RAINBOWWORLD도 쳐봤지만 No such container라고 뜨면서 어떠한 진행도 되지 않네요
서버명은 정확히 말하자면 Container Name입니다. 일반적으로 palworld-server를 입력하시면 됩니다. 헷갈릴 수 있으니 포스트들 내용을 전부 수정해놓겠습니다.