• 돌아가기
  • 아래로
  • 위로
  • 목록
  • 댓글
정보

팰월드 sh 스크립(재시작, 백업, 메모리 사용량별 재시작)

DarkAcid 3352

2

26

안녕하세요! 지난번에 도커 webhook으로  질문드렸던 내용의 해결이 생각보다 간단하게 RCON이라는 프로토코로 해결하고 후기 남깁니다.

Some Useful PalWorld Scripts (github.com)

해당내용은 위의 링크를 한국어로 번역하고 제 입맛대로 구현한것입니다.

1. 스크립트 사용전 기본준비

먼저 이를 위해서는 아래처럼 환경변수에서 25575 포트를 외부로 노출해주고 RCON관련 설정을 세팅해주셔야합니다. 그리고 반드시 Admin_Password도 설정된 상태여야만합니다. 제가 쓰는 아래스택을 참조하시면 되겠습니다.

services:
   palworld:
      image: thijsvanloef/palworld-server-docker:latest
      restart: unless-stopped
      container_name: palworld-server
      ports:
        - 8211:8211/udp
        - 27015:27015/udp
        - 25575:25575
      environment:
         - PUID=1000
         - PGID=1000
         - PORT=8211 # Optional but recommended
         - PLAYERS=16 # Optional but recommended
         - MULTITHREADING=true
         - RCON_ENABLED=true
         - RCON_PORT=25575
         - COMMUNITY=false  # Enable this if you want your server to show up in the community servers tab, USE WITH SERVER_PASSWORD!
         # Enable the environment variables below if you have COMMUNITY=true
         # - SERVER_PASSWORD="darkacidworld"
         # - SERVER_NAME="Dark World"
         - ADMIN_PASSWORD=""
      volumes:
         - /data/palworld:/palworld/   

   

먼저 RCON이란 CLI에서 게임에 로그인 하지않아도 여러 명령어를 보낼 수 있는 방법중 하나입니다.

해당 방법으로 제일 많이 쓰이는 것이 AARCON이라고 하는 오픈소스 프로젝트인데. 이 스크립트를 쓰기위해서는 먼저 다운하셔야합니다.GitHub - radj307/ARRCON: Lightweight Source RCON client that works on Windows, macOS, & Linux.

윈도우도 가능하고 리눅스도 가능하고 맥도 가능합니다만 사용하는 방법이 좀 불친절해서 여기 풀어서 써봅니다.

 

기본적으로 CLI 툴이기 떄문에 윈도우에서는 파워쉘로 해당 exe가 다운되어있는 폴더를 cd명령어를  통해서 접근해줍니다.

cd /download/   

후에 명령어로 매개변수를 지정해줘야만 정상작동합니다.

윈도우는 바로 아래명령어로 실행하시면 CLI를 통해 서버에 RCON 콘솔에 접속하며 아래 기술할 명령어들을 보낼수있습니다.

 ARRCON -H $호스트ip -P $포트 -p $Admin_Password   

이러한 명령어로 작동되신다는걸 알기만 하시면 됩니다.

 

 

리눅스에서는 아래 명령어로 AARCON 파일을 실행가능하게 만들어 줍니다 

chmod +x ARRCON    

파일이 있는 디렉토리에서 아래 명령어로 RCON을 접속하실 수 있습니다. 

./ARRCON -H $호스트ip -P $포트 -p $Admin_Password   

 

인게임과 다르게 /슬래쉬 없이 명령어를 입력하시면 됩니다.

Save: This command will allow you to save your world's progress and data.

Info: This console command will display the server’s information.

DoExit: This command will close the current server.

Shutdown{Second}{Message Text}: This console command will shut down the server after the duration you put under “Seconds” for everyone playing on the server.

ShowPlayers: This console command will display a list of all the active players in the current server.

KickPlayer{Steam ID}: This console command will allow you to kick a particular player from the current server.

BanPlayer(Steam ID}: This command will allow you to ban a particular player from the current server.

TeleportToPlayer{Steam ID}: This Palworld console command will teleport you to a particular player.

TeleportToMe(Steam ID}: This command will teleport a particular player to you on the current server.

Broadcast{MessageText}: This console command will display a message to every player on the current server.

 

 

2. RCON을 사용한 재시작 스크립트

 

아래스크립트는 5분뒤 재시작을 하는 스크립트입니다. 저장은 5분뒤 종료됩니다라는 메시지와함께 서버가 저장됩니다. 저라면...save 명령어를 60초뒤에 한번 더 해주겠습니다. 

#!/bin/sh

RCON_PORT=<RCONPort>
ADMIN_PASSWORD=<AdminPassword>

echo 'broadcast Auto_Reboot_Initialized' | ./ARRCON -P $RCON_PORT -p $ADMIN_PASSWORD
echo 'save' | ./ARRCON -P $RCON_PORT -p $ADMIN_PASSWORD
echo "shutdown 300 Server_is_going_to_reboot_in_5_minutes" | ./ARRCON -P $RCON_PORT -p $ADMIN_PASSWORD
sleep 120
echo 'broadcast Server_is_going_to_reboot_in_3_minutes' | ./ARRCON -P $RCON_PORT -p $ADMIN_PASSWORD
sleep 60
echo 'broadcast Server_is_going_to_reboot_in_2_minutes' | ./ARRCON -P $RCON_PORT -p $ADMIN_PASSWORD
sleep 60
echo 'broadcast Server_is_going_to_reboot_in_60_seconds' | ./ARRCON -P $RCON_PORT -p $ADMIN_PASSWORD
sleep 50
echo 'broadcast Server_is_going_to_reboot_in_10_seconds' | ./ARRCON -P $RCON_PORT -p $ADMIN_PASSWORD
sleep 5
echo 'broadcast Server_is_going_to_reboot_in_5_seconds' | ./ARRCON -P $RCON_PORT -p $ADMIN_PASSWORD
sleep 1
echo 'broadcast Server_is_going_to_reboot_in_4_seconds' | ./ARRCON -P $RCON_PORT -p $ADMIN_PASSWORD
sleep 1
echo 'broadcast Server_is_going_to_reboot_in_3_seconds' | ./ARRCON -P $RCON_PORT -p $ADMIN_PASSWORD
sleep 1
echo 'broadcast Server_is_going_to_reboot_in_2_seconds' | ./ARRCON -P $RCON_PORT -p $ADMIN_PASSWORD
sleep 1
echo 'broadcast Server_is_going_to_reboot_in_1_second' | ./ARRCON -P $RCON_PORT -p $ADMIN_PASSWORD   

해당 스크립트에 RCON_PORT와 ADMIN_PASSWORD의 변수를 본인에 맞게 작성 후 AARCON과 같이 저장합니다. 저작은

palworld_restart_script.sh로 이름을 지정해주시면됩니다. AARCON과 같은 폴더에있어야 작동됩니다만 해당 스크립트를 건들이신 분들은 AARCON의 절대 경로를 지정해주셔도 됩니다.

 

3.Crontab을 이용한 재시작 설정

저는 대부분의 crontab 명령어는 루트에서 실행합니다. 유저로 실행했다가 실패한적이 한두번이 아니어서 말이죠. 그만큼 이렇게 간단한 내용의 스크립트가 아니고 내가 모르는 스크립트라면 루트로 돌리는건 당연히 지양해야합니다.

sudo su #루트유저변환
crontab -e   
30 13 * * * /home/chowhi123/server_regular_shutdown.sh
  

cron의 시간은 아무래도 서버의 기본 시간인듯한데 바꾸지 않았다면 UTC가 기준일겁니다.

timedatectl  

명령어로 시간 확인이 가능합니다.

 

전 미동부에 살아서 EST 기준 오전 8:30분에 스크립트가 실행되게 설정해두었습니다.

 

4. 메모리 점유율 80프로 이상시 재시작

#!/bin/bash

RCON_PORT=<RCONPort>
ADMIN_PASSWORD=<AdminPassword>
THRESHOLD=80

MEMORY_USAGE=$(free | grep Mem | awk '{print $3/$2 * 100.0}')

if (( $(echo "$MEMORY_USAGE > $THRESHOLD" | bc -l) )); then
    echo "Memory usage is above $THRESHOLD%. Running clean command."
    echo "broadcast Memory_Is_Above_$THRESHOLD%" | ./ARRCON -P $RCON_PORT -p $ADMIN_PASSWORD
    echo "save" | ./ARRCON -P $RCON_PORT -p $ADMIN_PASSWORD
    echo "shutdown 60 Reboot_In_60_Seconds" | ./ARRCON -P $RCON_PORT -p $ADMIN_PASSWORD
    cd ~/backups ; ./backup.sh
else
    echo "Memory usage is below $THRESHOLD%. No action required."
fi  

해당 스크립트는 시간별 한번씩이면 적당하지 않나 싶습니다.

 

해당스크립트를 사용하기위해서는 bc라는 패키지를 apt install bc를 이용해 설치해주어야합니다.

신고공유스크랩
26
2명이 추천

DarkAcid
31Lv. 20182P
다음 레벨까지 298P

서버운영 초보

메인컴퓨터: 5800x/x570itx/16G/1080evga se

서버컴퓨터1: Proxmox/2700x/B450m/24GB/1060 msi 3gb

- Plex, Docker, Pihole, Xenology, Home Assistant

서버컴퓨터2: Proxmox/2400G/B450ITX ASUS/16GB

- Xenology, Canvas, Window

 

클라우드

Oracle: Zerotie, Vultr: Pritunl, AWS: 미디어 프로덕션

뉴비 2024.02.05. 03:48
./ARRCON -H $호스트ip -P $포트 -p $Admin_Password
에서 만약 구글클라우드 서버라면 구글 클라우드 외부아이피를 적으면 되고 포트는 25575 적으면 되지 않나요?
위 방법대로 적고 실행을 했는데 연결 실패문구가 뜹니다. 혹시 잘 못 생각한 부분이 있나요?
DarkAcid 글쓴이 2024.02.05. 03:53
뉴비
구글 클라우드 서버라고 하면 혹시 클라우드의 적용되어있는 방화벽 규칙중 25575가 열려있는지 확인해보시겠어요?
뉴비 2024.02.05. 14:47
DarkAcid
확인해 보니 서버 세팅 ini에서 rcon enable 이 true 안 바꿔서 그런거였네요!
빠른 답변 감사합니다!

그런데 서버를 screen 을 통해 열고 있는데 crontab에서 screen 에서 서버 구동기를 돌리도록 할 수가 있나요? 그냥 crontab으로 * * * * * (구동기 파일위치) 로 하면 screen에서 여는게 아닌거 같아서 질문 드립니다.
DarkAcid 글쓴이 2024.02.05. 16:52
뉴비
네 구동기 파일이 아니라 제가 위에 올린 스크립트를 쓰셔야합니다.

댓글 쓰기 권한이 없습니다. 로그인

취소 댓글 등록

cmt alert

신고

"님의 댓글"

이 댓글을 신고하시겠습니까?

댓글 삭제

"님의 댓글"

삭제하시겠습니까?


목록

공유

facebooktwitterpinterestbandkakao story