최근 펠월드가 핫해지면서 아무래도 친구들과 멀티 서버를 운영하고 싶은 사람들이 많을 것 같다!
근데 문제가 있다면 아직 최적화가 덜 된 게임이라 그런지 메모리 누수 등 문제가 조금 있는 것 같다. 그래서 서버를 돌리더라도 안정적으로 돌리기 위해서는 자주 자주 재시작을 해줘야 한다.
특히 시놀로지에서 돌리게 되면, 도커 안에 우분투를 넣어서 돌리게 될테고 리소스를 계속 확인해보면 시간이 가면 갈수록 메모리를 잡아먹는 것을 알 수 있다.
시놀로지에서 펠월드 서버를 구동하는 방식은 아래의 유튜브를 참고하길 바란다.
먼저, rcon이라는 것을 설정해주어야한다. 이것은 내가 굳이 게임에 접속하지 않고도, 게임 서버에 원격으로 접속하여 어드민 명령어와 같은 것을 실행할 수 있도록 해준다.
해당 깃 페이지로 들어가면 윈도우 버전과 리눅스 버전이 있는데 우리는 i386 linux로 되어있는 것을 받으면 된다.
wget https://github.com/gorcon/rcon-cli/releases/download/v0.10.3/rcon-0.10.3-i386_linux.tar.gz
tar -zxvf rcon-0.10.3-i386_linux.tar.gz
명령어를 펠월드 서버가 구동되고 있는 우분투 컨테이너에서 실행한다. 그러면 .tar.gz파일을 다운받고압축까지 푸는 명령어이다.
그러면 rcon-0.10.3~~하는 폴더 안에 rcon을 실행하여 우리는 서버에 원격으로 접속할 수 있는데 이러면 해당 경로를 추적하기가 어렵기 때문에 폴더명을 바꾸어 줄 필요가 있다!
mv rcon-0.10.3-i386_linux rcon
이렇게 간단하게 rcon으로 바꾸어 줄 수 있다. 나는 steam 유저의 홈 디렉토리에 다운받고 압축을 풀었기 때문에 ~/rcon/rcon {명령어} 로 실행할 수 있게 되었다.
테스트하기 위해서는
~/rcon/rcon -a 호스트:포트 -p 비밀번호 명령어
를 입력하여 rcon이 정상적으로 작동하는지 확인해볼 수 있다. 그러나 펠월드 서버에서 rcon설정을 아직 진행하지 않았다면 테스트할 수 없다.
~/Steam/steamapps/common/PalServer/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini
에 존재하는 펠월드 서버 설정파일에 존재하는 여러 설정 중 rcon 설정을 열어주어야 한다. 그래야 1단계에서 설치한 rcon이 정상적으로 작동하는지도 테스트 가능하다.
해당 설정 파일에 적혀있는 내용 중 RCONEnabled=False
값을 RCONEnabled=True
로 바꿔주고, 그 뒤에 있는 rcon포트도 개인 포트로 변경해주자. 추가적으로 메모리 과부하를 좀 더 방지하고 싶다면 습격 옵션을 오프하면 좋다고 포럼에서 읽었기 때문에 습격도 비활성화 할 것을 추천한다. bEnableInvaderEnemy=True
을 bEnableInvaderEnemy=False
로 수정해주자!
설정을 변경했으면 서버를 한번 껐다가 켜주면 된다. 그리고 rcon이 잘 작동하는지도 테스트 하자
이제 자동화를 할 차례이다. 먼저 crontab으로 정시에 실행할 sh파일을 하나 생성한다. 나는 마찬가지로 steam 유저의 홈 디렉토리에 server-restart.sh라는 파일을 생성할 것이다.
vim server-restart.sh
그리고 아래와 같이 입력하면 된다.
~/rcon/rcon/rcon -a 주소:포트 -p 12341234 "Save"
~/rcon/rcon/rcon -a 주소:포트 -p 12341234 "Broadcast Server_Restart_in_10_seconds"
sleep 1
~/rcon/rcon/rcon -a 주소:포트 -p 12341234 "Broadcast Server_Restart_in_9_seconds"
sleep 1
~/rcon/rcon/rcon -a 주소:포트 -p 12341234 "Broadcast Server_Restart_in_8_seconds"
sleep 1
~/rcon/rcon/rcon -a 주소:포트 -p 12341234 "Broadcast Server_Restart_in_7_seconds"
sleep 1
~/rcon/rcon/rcon -a 주소:포트 -p 12341234 "Broadcast Server_Restart_in_6_seconds"
sleep 1
~/rcon/rcon/rcon -a 주소:포트 -p 12341234 "Broadcast Server_Restart_in_5_seconds"
sleep 1
~/rcon/rcon/rcon -a 주소:포트 -p 12341234 "Broadcast Server_Restart_in_4_seconds"
sleep 1
~/rcon/rcon/rcon -a 주소:포트 -p 12341234 "Broadcast Server_Restart_in_3_seconds"
sleep 1
~/rcon/rcon/rcon -a 주소:포트 -p 12341234 "Broadcast Server_Restart_in_2_seconds"
sleep 1
~/rcon/rcon/rcon -a 주소:포트 -p 12341234 "Broadcast Server_Restart_in_1_seconds"
sleep 2
~/rcon/rcon/rcon -a 주소:포트 -p 12341234 "DoExit"
sleep 3
screen -dms palworld sh ~/Steam/steamapps/common/PalServer/PalServer.sh -useperfthreads -NoAsyncLoadingThread -UseMultithreadForDs
rcon으로 서버에 접속해서 현재까지의 데이터를 Save한다. 그리고 사용자들에게 서버가 종료된다고 알려준다.
이후 서버를 종료하고, screen에서 새롭게 실행한다. 아주 간단한 sh파일이다.
이제 crontab -e를 하여 크론탭에서 주기와 방금 만들 실행파일을 등록해준다.
*/120 * * * * ~/server-restart.sh > cron_log.log 2> cron_err.err
120분에 한번씩 실행하고, 정상적으로 작동되면 로그를 남기고 실패하면 err을 남기도록 설정하였다.
service cron restart
크론탭을 재시작하고 설정이 변경되도록 하면 끝난다.
만약 중간에 스팀 cmd 서버의 업데이트를 체크하고 싶다면 DoExit명령어로 서버를 종료한 뒤에, 아래 명령어를 실행시켜주면 된다
steamcmd +login anonymous +app_update 2394010 validate +quit
그러면 끝~~
좋은 글 너무 잘 읽었습니다!! 혹시 screen -dms palworld sh 를 통해서 스크린이 자동으로 새로 생성되면! 이전에 쓰던 스크린도 자동으로 삭제되게끔 못하나요?