教程基于CentOS7系统操作
https://tech.palworldgame.com/dedicated-server-guide#linux
https://developer.valvesoftware.com/wiki/SteamCMD#Linux
1.以root用户创建steam用户
sudo useradd -m steam
sudo passwd steam
2.进文件夹
sudo -u steam -s
cd /home/steam
3.安装运行SteamCMD所需的依赖项
yum install glibc.i686 libstdc++.i686
4.切换steam用户
su - steam
5.为SteamCMD创建一个目录并切换到该目录
mkdir ~/Steam && cd ~/Steam
6.下载并解压 Linux 版 SteamCMD
curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | tar zxvf -
7.启动SteamCMD并且安装Palworld服务
cd ~/Steam
./steamcmd.sh +login anonymous +app_update 2394010 validate +quit
8.进入Palworld目录
cd ~/Steam/steamapps/common/PalServer
9.启动
./PalServer.sh
服务器管理员相关命令
/AdminPassword {AdminPassword}
登录获取管理权限。
/Shutdown {Seconds} {MessageText}
服务器关闭后的秒数将通知您的 MessageText。
/DoExit
强制停止服务器。
/Broadcast {MessageText}
向服务器中的所有玩家发送消息。
/KickPlayer {SteamID}
将玩家从服务器中踢出。
/BanPlayer {SteamID}
从服务器禁止玩家。
/TeleportToPlayer {SteamID}
传送到目标玩家的当前位置。
/TeleportToMe {SteamID}
目标玩家传送到您当前的位置。
/ShowPlayers
显示所有已连接玩家的信息。
/Info
显示服务器信息。
/Save
保存世界数据。
【推荐】服务器内存监控达到指定阈值重启并删除残留文件
#!/bin/bash
# 设置内存占用阈值
MEMORY_THRESHOLD=90
# 获取当前内存占用
MEMORY_USAGE=$(free | awk '/Mem/{printf("%.2f"), $3/$2*100}')
# 进程名称
PROCESS_NAME="PalServer.sh"
# RCON相关信息
RCON_HOST="127.0.0.1"
RCON_PORT="25575"
RCON_PASSWORD="密码"
rm -rf /home/steam/Steam/steamapps/common/PalServer/Pal/Binaries/Linux/PalServer-Linux-Test.debug
rm -rf /home/steam/Steam/steamapps/common/PalServer/Pal/Binaries/Linux/core.*
# 检测端口是否正常
if ! nc -z -w1 $RCON_HOST $RCON_PORT; then
echo "端口 $RCON_HOST:$RCON_PORT 异常,执行杀死进程操作"
# 获取目标进程及其所有子进程的PID
PROCESS_IDS=$(pgrep -o $PROCESS_NAME)
# 杀死进程及其所有子进程
if [ -n "$PROCESS_IDS" ]; then
echo "杀死进程 $PROCESS_NAME 及子进程 (PIDs: $PROCESS_IDS)"
pkill -P $PROCESS_IDS
else
echo "没有发现 $PROCESS_NAME 进程"
fi
else
echo "端口 $RCON_HOST:$RCON_PORT 正常"
fi
# 检查内存占用是否超过阈值
if (( $(echo "$MEMORY_USAGE > $MEMORY_THRESHOLD" | bc -l) )); then
# 在结束进程之前通过RCON执行指定命令
echo "占用达到 $MEMORY_THRESHOLD% 执行RCON命令"
mcrcon -H $RCON_HOST -P $RCON_PORT -p $RCON_PASSWORD "Shutdown 120 [-Warning-]-[RAM_$MEMORY_USAGE%]-[Restart_after_120_seconds]"
sleep 125
MEMORY_USAGE=$(free | awk '/Mem/{printf("%.2f"), $3/$2*100}')
# 检查是否完全卡死
if (( $(echo "$MEMORY_USAGE > $MEMORY_THRESHOLD" | bc -l) )); then
# 强制重启
echo "强制重启"
# 获取目标进程及其所有子进程的PID
PROCESS_IDS=$(pgrep -o $PROCESS_NAME)
# 杀死进程及所有子进程
if [ -n "$PROCESS_IDS" ]; then
echo "杀死进程 $PROCESS_NAME 及子进程 (PIDs: $PROCESS_IDS)"
pkill -P $PROCESS_IDS
else
echo "没有发现 $PROCESS_NAME 进程"
fi
else
# 正常重启
echo "正常重启"
fi
else
# 低于阈值
echo "状态正常"
mcrcon -H $RCON_HOST -P $RCON_PORT -p $RCON_PASSWORD "Broadcast [-State-]-[RAM_$MEMORY_USAGE%]"
fi
【可选】压缩内存
大小建议用内存一半就够了
如果物理内存超过32G弄个8G或不弄都可以
新建一个名为【zram.sh】脚本
#!/bin/bash
function configure_zram() {
# 提示用户输入希望设置的 zram 大小(以 GB 为单位)
read -p "请输入希望设置的 zram 大小(以 GB 为单位): " SIZE_IN_GB
# 将 GB 转换为字节
SIZE_IN_BYTES=$((SIZE_IN_GB * 1024 * 1024 * 1024))
# 加载 zram 模块
sudo modprobe zram
# 配置 zram 设备
echo $SIZE_IN_BYTES > /sys/block/zram0/disksize
# 启用 zram 设备
sudo mkswap /dev/zram0
sudo swapon /dev/zram0
# 显示信息
echo "已配置 zram 大小为 ${SIZE_IN_GB}GB。"
# 显示在重启时保持配置的提示
echo "要使 zram 在系统重启时保持配置,请将以下行添加到启动脚本中(例如 /etc/rc.local):"
echo "modprobe zram"
echo "echo $SIZE_IN_BYTES > /sys/block/zram0/disksize"
echo "mkswap /dev/zram0"
echo "swapon /dev/zram0"
}
function uninstall_zram() {
# 卸载 zram 设备
sudo swapoff /dev/zram0
sudo rmmod zram
# 显示信息
echo "已卸载 zram 设备。"
}
# 提示用户选择操作
echo "请选择操作:"
echo "0. 卸载 zram"
echo "1. 配置 zram"
read -p "请输入选项 (0 或 1): " OPTION
case $OPTION in
0)
uninstall_zram
;;
1)
configure_zram
;;
*)
echo "无效的选项。请输入 0 或 1。"
;;
esac
文件权限
sudo chmod +x zram.sh
执行
sudo ./zram.sh
压缩权重
cat > '/etc/sysctl.conf' << EOF
vm.swappiness=100
EOF
sysctl -p
评论