突然看到 Steam 好友列表都在玩 Palworld。这到底是个啥游戏这么火, 打开 Steam 商店统计一看哦豁热销、游玩都是第一名。
离游戏发布短短 16 天 43 个好友已拥有??? 什么游戏这么热门!?
下载启动, 逐渐入迷下机的时候一看时间 7 天过去了。一直都是单机玩的如果可以和小伙伴一起联机该多好啊。但是使用游戏自带的邀请码加入游戏, 需要房主在线才能其他人才能加入游戏。对于这种 RPG 游戏存档很重要, 但是它保存在房主的电脑上, 非常不方便。
不如我们用云服务器搭建一个游戏服务器, 这样随时都可以加入游戏, 我们睡觉的时候帕鲁也会继续工作。压榨帕鲁让他们 007 的工作
搭建步骤
目前, Palworld 服务端存在内存泄漏问题。为了保证能够 24 小时稳定运行, 内存最低为 32 或 64GB
规格 | 数值 | 备注 |
---|---|---|
系统 | CentOS 7 | 也可以使用 Ubuntu 等系统 |
CPU | 4 个虚拟 CPU | 官方建议为 4 核以上 |
内存 | 16 GB | 官方建议为 16GB 以上, 为了稳定运行建议使用 32GB |
硬盘 | 100 GB | 截至 2024 年 1 月, 服务器文件总容量为 4.8 GB |
公开端口 | 8211 (UDP) | 默认端口 |
SELinux | 已禁用 |
如果内存很小, 比如在 VPS 中, 可以创建 swap 虚拟内存, 即使物理内存小于官方推荐值也能稳定运行。不过, 这取决于磁盘 I/O 性能。
禁用 SELinux
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0
安装 SteamCMD
为了安全起见, 使用非 root 用户运行游戏服务端。首先, 以 root 用户身份登录到服务器, 创建一个名为 steam
的用户, 并切换到该用户的环境下
# 安装 32 位运行依赖
yum install glibc.i686 libstdc++.i686 -y
# 创建 steam 用户
useradd -m steam
# 切换为 steam 用户
su - steam
# 下载 SteamCMD
wget http://media.steampowered.com/installer/steamcmd_linux.tar.gz
tar -xf steamcmd_linux.tar.gz
./steamcmd.sh
安装 Palworld 服务端
# 创建安装目录
mkdir PalServer
# 进入 steam 命令行
./steamcmd.sh
Steam>force_install_dir ./PalServer # 指定安装目录
Steam>login anonymous # 以匿名身份登录
Steam>app_update 2394010 validate # Palworld 的 App ID 是 2394010
Steam>quit # 退出 steamcmd
启动 Palworld 服务端
cd PalServer/
./PalServer.sh
如果遇到找不到 steamclient.so
文件的错误需要按照下面步骤修复
steamclient.so: cannot open shared object file: No such file or directory
dlopen failed trying to load:
/home/steam/.steam/sdk64/steamclient.so
with error:
/home/steam/.steam/sdk64/steamclient.so: cannot open shared object file: No such file or directory
[S_API] SteamAPI_Init(): Sys_LoadModule failed to load: /home/steam/.steam/sdk64/steamclient.so
^CFUnixPlatformMisc::RequestExitWithStatus
FUnixPlatformMisc::RequestExit
Exiting abnormally (error code: 130)
Shutdown handler: cleanup.
修复步骤
# 创建依赖文件路径
mkdir -p .steam/sdk64/
# 创建软连接
ln -s /home/steam/linux64/steamclient.so /home/steam/.steam/sdk64/steamclient.so
# 检查文件
[steam@server ~]$ ls -al /home/steam/.steam/sdk64/steamclient.so
lrwxrwxrwx 1 steam steam 34 Feb 4 2024 /home/steam/.steam/sdk64/steamclient.so -> /home/steam/linux64/steamclient.so
再次启动服务端
[steam@server PalServer]$ ./PalServer.sh
Shutdown handler: initalize.
Increasing per-process limit of core file size to infinity.
sh: xdg-user-dir: command not found
dlopen failed trying to load:
steamclient.so
with error:
steamclient.so: cannot open shared object file: No such file or directory
[S_API] SteamAPI_Init(): Loaded '/home/steam/.steam/sdk64/steamclient.so' OK. (First tried local 'steamclient.so')
CAppInfoCacheReadFromDiskThread took 3 milliseconds to initialize
dlmopen steamservice.so failed: steamservice.so: cannot open shared object file: No such file or directory
Setting breakpad minidump AppID = 2394010
[S_API FAIL] Tried to access Steam interface SteamUser021 before SteamAPI_Init succeeded.
[S_API FAIL] Tried to access Steam interface SteamFriends017 before SteamAPI_Init succeeded.
[S_API FAIL] Tried to access Steam interface STEAMAPPS_INTERFACE_VERSION008 before SteamAPI_Init succeeded.
[S_API FAIL] Tried to access Steam interface SteamNetworkingUtils004 before SteamAPI_Init succeeded.
检查是否可以正常启动, 没有其他错误后可以按 Ctrl+C 停止服务器。
设置 systemd 服务
使用 systemd 管理 Palworld 服务端
vim /etc/systemd/system/palworld.service
输入以下内容并使用 :wq
保存
[Unit]
Description=Palworld Dedicated Server
Wants=network-online.target
After=syslog.target network.target nss-lookup.target network-online.target
[Service]
User=steam
Group=steam
ExecStart=/home/steam/PalServer/PalServer.sh EpicApp=PalServer -useperfthreads -NoAsyncLoadingThread -UseMultithreadForDS
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s INT $MAINPID
LimitNOFILE=100000
Restart=always
TimeoutStartSec=300
[Install]
WantedBy=multi-user.target
启动参数
PalServer.sh 选项 | 意义 |
---|---|
port=8211 | 服务器监听的端口号 |
players=32 | 服务器上的最大玩家数量 |
EpicApp=PalServer | 设置为社区服务器, 在列表中可见 |
-useperfthreads -NoAsyncLoadingThread -UseMultithreadForDS |
提高多核 CPU 环境中的性能。它最多可有效处理 4 个线程, 分配超过该数量的线程就没有什么意义了 |
服务器启动命令
# 重载 systemd 配置文件
systemctl daemon-reload
# 开机自动启动
systemctl enable palworld.service
# 启动 palworld
systemctl start palworld.service
# 停止 palworld
systemctl stop palworld.service
# 检查运行状态
systemctl status palworld.service
配置防火墙
游戏使用 UDP 8211
端口
firewall-cmd --add-port=8211/udp --permanent
firewall-cmd --reload
进阶游戏设置
默认的幻兽帕鲁服务器设置可能无法满足所有玩家或服务器主的需求。例如, 你希望提升昼夜速度、限制掉落物数量、或是设置更高的玩家上限。此时, 就需要通过自定义游戏设置, 来创建符合自己玩法风格的服务器。
本节将介绍如何修改和管理服务器的配置文件, 深入掌握游戏的各项参数, 并处理那些无法直接通过 .ini
文件配置的高级选项。无论你是要打造休闲服或者是养老服, 还是硬核PVP挑战服, 这部分内容都将完美解决你的问题。
配置文件介绍
Palworld 的服务器配置文件默认位于
/home/steam/PalServer/DefaultPalWorldSettings.ini
该文件定义了游戏的基础规则和服务器参数。需要注意的是, 当前版本中只有在该文件中明确列出的参数才会被游戏引擎识别和生效。如果你尝试添加未支持的选项, 即使格式正确, 也不会产生任何效果。
对于那些未在配置文件中公开支持的高级参数 (例如每个公会的基地数量上限、每个基地的最大工作帕鲁数量、每个基地人数上限等), 则需要通过修改存档目录下的 WorldOption.sav
文件来实现。这种修改方式需要借助专门的工具, 例如开源项目 palworld-worldoptions
复制默认配置文件
直接修改 DefaultPalWorldSettings.ini
不会生效, 游戏启动时并不会读取该文件的更改。正确的做法是复制默认模板到 PalWorldSettings.ini
, 并在其中修改参数以启用自定义设置
cp PalServer/DefaultPalWorldSettings.ini PalServer/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini
配置文件中的常见选项
PalWorldSettings.ini
允许配置以下内容:
[/Script/Pal.PalGameWorldSettings]
OptionSettings=(ServerPlayerMaxNum=32,DayTimeSpeedRate=2.0,DropItemMaxNum=3000)
配置项说明 (来源于 0.5.0 版本):
注意格式, 括号内为结构体字段, 大小写与逗号分隔必须准确。
配置项 | 作用 |
---|---|
AdminPassword |
管理员密码, 获得管理员权限 |
AllowConnectPlatform |
指定连接平台, 🚫 当前版本无效, 使用 CrossplayPlatforms 代替 |
BaseCampMaxNumInGuild |
每个公会最大营地数量, 默认 4, 最大 10, 值越大负载越高 |
BaseCampWorkerMaxNum |
每个营地最大帕鲁数, 最大 50, 值越大负载越高 |
bAllowGlobalPalboxExport |
允许导出至全球帕鲁盒 |
bAllowGlobalPalboxImport |
允许从全球帕鲁盒导入 |
bBuildAreaLimit |
限制建筑靠近特定设施, 禁止在快速移动点等附近建造 |
bCharacterRecreateInHardcore |
重生功能 (硬核模式), 🚫 保留字段 |
bEnableFastTravel |
开启快速移动 |
bEnableInvaderEnemy |
开启敌人入侵事件 |
bHardcore |
硬核模式, 死亡后无法复活 |
bInvisibleOtherGuildBaseCampAreaFX |
显示其他公会营地区域特效 |
bIsRandomizerPalLevelRandom |
帕鲁等级完全随机 |
bIsUseBackupSaveData |
启用世界备份功能, 会增加磁盘 I/O |
bPalLost |
死亡时永久失去帕鲁 |
bShowPlayerList |
显示 ESC 菜单下的玩家列表 |
BuildObjectDamageRate |
建筑受伤倍率 |
BuildObjectDeteriorationDamageRate |
建筑老化速度 |
ChatPostLimitPerMinute |
每分钟可发言次数限制 |
CollectionDropRate |
采集物掉落倍率 |
CollectionObjectHpRate |
采集物生命值倍率 |
CollectionObjectRespawnSpeedRate |
采集物刷新间隔倍率 |
CrossplayPlatforms |
跨平台连接支持, 默认: (Steam,Xbox,PS5,Mac) |
DayTimeSpeedRate |
白天流逝速度 |
DeathPenalty |
死亡惩罚类型, 支持: None / Item / ItemAndEquipment / All |
EnemyDropItemRate |
怪物掉落倍率 |
ExpRate |
经验获取倍率 |
GuildPlayerMaxNum |
每个公会最大玩家数 |
ItemWeightRate |
道具重量倍率 |
LogFormatType |
日志格式类型, 可选 Text 或 Json |
MaxBuildingLimitNum |
每位玩家建筑上限, 0 表示无限制 |
NightTimeSpeedRate |
夜晚流逝速度 |
PalAutoHPRegeneRate |
帕鲁自动回血速度 |
PalAutoHpRegeneRateInSleep |
帕鲁休息回血速度 (帕鲁盒中) |
PalCaptureRate |
帕鲁捕获倍率 |
PalDamageRateAttack |
帕鲁造成的伤害倍率 |
PalDamageRateDefense |
帕鲁受到的伤害倍率 |
PalEggDefaultHatchingTime |
巨型蛋孵化时间 (小时), 所有蛋通用 |
PalSpawnNumRate |
帕鲁出现数量倍率, 增大会影响性能 |
PalStaminaDecreaceRate |
帕鲁体力消耗速度 |
PalStomachDecreaceRate |
帕鲁饥饿消耗速度 |
PlayerAutoHPRegeneRate |
玩家自动回血速度 |
PlayerAutoHpRegeneRateInSleep |
玩家睡觉回血速度 |
PlayerDamageRateAttack |
玩家造成的伤害倍率 |
PlayerDamageRateDefense |
玩家受到的伤害倍率 |
PlayerStaminaDecreaceRate |
玩家体力消耗速度 |
PlayerStomachDecreaceRate |
玩家饥饿消耗速度 |
PublicIP |
指定外部 IP (社区服务器) |
PublicPort |
指定外部端口 (社区服务器), 不影响监听端口 |
RCONEnabled |
启用 RCON 控制台 |
RCONPort |
RCON 控制台端口 |
RESTAPIEnabled |
启用 REST API |
RESTAPIPort |
REST API 监听端口 |
ServerDescription |
服务器描述 |
ServerName |
服务器名称 |
ServerPassword |
加入服务器所需密码 |
ServerPlayerMaxNum |
服务器最大玩家数 |
ServerReplicatePawnCullDistance |
帕鲁同步距离 (cm), 最小值: 5000, 最大值: 15000 |
SupplyDropSpan |
空投间隔 (分钟) |
使用 WorldOption.sav
修改高级设置 (进阶)
并非所有设置都可以在 .ini
文件中修改, 一些选项并不会在该配置文件中列出, 即使手动添加也不会生效。
这些选项实际上是保存在保存档目录中 WorldOption.sav
文件里, 必须使用工具修改。
PalServer/Pal/Saved/SaveGames/0/<世界 UUID>/WorldOption.sav
推荐使用社区项目: legoduded/palworld-worldoptions 进行生成
安装示例
环境要求
- Python 3.10 或更高版本
- Linux 用户还需额外安装 trumank/uesave-rs (用于解析和编辑 Unreal Engine 的
.sav
文件)
# 克隆项目源码
git clone https://github.com/legoduded/palworld-worldoptions.git
cd palworld-worldoptions
# (Linux 用户专属) 安装 uesave 模块
wget https://github.com/trumank/uesave-rs/releases/download/v0.6.2/uesave_cli-x86_64-unknown-linux-gnu.tar.xz
tar -xf uesave_cli-x86_64-unknown-linux-gnu.tar.xz
mv uesave_cli-x86_64-unknown-linux-gnu/uesave /usr/local/bin/uesave
chmod +x /usr/local/bin/uesave
# 测试是否安装成功
uesave --help
使用方式
legoduded@desktop:~/palworld-worldoptions/src$ python3 main.py /mnt/g/PalServer/Pal/Saved/Config/WindowsServer/PalWorldSettings.ini --uesave /usr/local/bin/uesave --output /mnt/g/PalServer/Pal/Saved/SaveGames/0/8FAEE1FC44A4A5032BC92F8BCFD43AE3
Found settings
Found uesave
Converting JSON
Converted /mnt/g/pal/steamcmd/steamapps/common/PalServer/Pal/Saved/SaveGames/0/8FAEE1FC44A4A5032BC92F8BCFD43AE3/WorldOption.sav.json to /mnt/g/pal/steamcmd/steamapps/common/PalServer/Pal/Saved/SaveGames/0/8FAEE1FC44A4A5032BC92F8BCFD43AE3/WorldOption.sav
Complete!
Restart your palworld server to apply the changes
更新 Palworld 服务端
游戏推出新版本后服务端也需要更新
手动更新
使用 steamcmd 命令更新
# 运行 steamcmd.sh
./steamcmd.sh
# 以匿名身份登录
> login anonymous
# 指定 ./PalServer 为安装目录
> force_install_dir ./PalServer
# Palworld 的 App ID 是 2394010 并验证完整性
> app_update 2394010 validate
# 等待进度达到 100
# 退出 steamcmd
> quit
可以使用 +
号将命令连接起来, 拼接为一行命令
./steamcmd.sh +force_install_dir ./PalServer +login anonymous +app_update 2394010 validate +quit
使用脚本自动更新
使用 api.steamcmd.net 来获取最新的 Build ID, 避免对 Steam 服务器造成过重的负载。脚本运行间隔时间很短影响也不大, 间隔推荐设置为每 30 分钟执行一次
定期检查服务端版本, 如果版本不同, 则进行更新, 服务端将自动更新并重新启动。
创建更新脚本
# 安装 jq 命令来处理 json
yum install jq -y
# 创建更新脚本
vim update-palworld.sh
写入以下内容
#!/bin/bash
# 字体颜色定义
Font_Black="\033[30m"
Font_Red="\033[31m"
Font_Green="\033[32m"
Font_Yellow="\033[33m"
Font_Blue="\033[34m"
Font_Purple="\033[35m"
Font_SkyBlue="\033[36m"
Font_White="\033[37m"
Font_Suffix="\033[0m"
# 消息提示定义
Msg_Info="${Font_Blue}[Info] ${Font_Suffix}"
Msg_Warning="${Font_Yellow}[Warning] ${Font_Suffix}"
Msg_Debug="${Font_Yellow}[Debug] ${Font_Suffix}"
Msg_Error="${Font_Red}[Error] ${Font_Suffix}"
Msg_Success="${Font_Green}[Success] ${Font_Suffix}"
Msg_Fail="${Font_Red}[Failed] ${Font_Suffix}"
# Paths
STEAMCMD="/home/steam/steamcmd.sh"
INSTALL_DIR="/home/steam/PalServer"
SERVICE_NAME="palworld.service"
echo -e "${Msg_Info}Environment Check"
echo -e "${Msg_Info}$(date '+%Y-%m-%d %H:%M:%S %Z')"
# Retrieve the current Build ID
OLD_Build=`$STEAMCMD +force_install_dir $INSTALL_DIR +login anonymous +app_status 2394010 +quit | grep -e "BuildID" | awk '{print $8}'`
echo -e "${Msg_Info}Current BuildID: ${Font_Yellow}$OLD_Build${Font_Suffix}"
# Attempt to fetch the New Build ID using curl
NEW_Build=$(curl -s https://api.steamcmd.net/v1/info/2394010 | jq -r '.data["2394010"].depots.branches.public.buildid')
# Fallback to SteamCMD method if curl fails to retrieve data
if [ -z "$NEW_Build" ] || [ "$NEW_Build" = "null" ]; then
echo -e "${Msg_Fail}Failed to fetch New BuildID with curl. EXIT"
exit 1
# echo "Failed to fetch New BuildID with curl. Resorting to SteamCMD."
# $STEAMCMD +force_install_dir $INSTALL_DIR +login anonymous +app_update 2394010 validate +quit > /dev/null
# NEW_Build=`$STEAMCMD +force_install_dir $INSTALL_DIR +login anonymous +app_status 2394010 +quit | grep -e "BuildID" | awk '{print $8}'`
fi
echo -e "${Msg_Info}Fetched New BuildID: ${Font_Yellow}$NEW_Build${Font_Suffix}"
# Update the server if the Build IDs do not match
if [ "$OLD_Build" = "$NEW_Build" ]; then
echo -e "${Msg_Warning}No update required. Build numbers are equal."
else
echo -e "${Msg_Info}Stopping ${SERVICE_NAME} ready for update."
systemctl stop $SERVICE_NAME
echo -e "${Msg_Info}Updating the game server..."
# > /dev/null
$STEAMCMD +force_install_dir $INSTALL_DIR +login anonymous +app_update 2394010 validate +quit
echo -e "${Msg_Success}Game server updated successfully to BuildID: ${Font_Yellow}$NEW_Build${Font_Suffix}"
echo -e "${Msg_Info}Restart ${SERVICE_NAME} after update."
systemctl start $SERVICE_NAME
echo -e "${Msg_Info}Update complete. New BuildID: $NEW_Build"
systemctl status $SERVICE_NAME
fi
赋予执行权限
chmod +x /home/steam/update-palworld.sh
运行测试
# 在主目录里
./update-palworld.sh
# 完整路径
/home/steam/update-palworld.sh
如果没有问题, 可以使用 cron 定期运行它。每 30 分钟检查一次是否有更新, 如果有, 则执行更新并重新启动服务器。
crontab -e
*/30 * * * * /home/steam/update-palworld.sh
内存不足时自动重启 Palworld
Palworld 服务端持续运行 2 天左右, 占用的内存大的离谱。人物经过的地图会被加载到内存里, 但在人物离开后不会释放内存。
创建内存检查脚本。如果内存使用率超过80%, 服务器将重新启动。
vim check-palworld-memory.sh
写入以下内容
#!/bin/bash
# Palworld Service Name
SERVICE_NAME="palworld.service"
# 当服务器内存使用率 (%) 超过此阈值时, 重启服务
THRESHOLD=80
# 是否检查 SWAP 空间 (设置为 True 表示检查, False 表示不检查)
CHECK_SWAP=False
# 获取当前内存使用率 (%)
mem_usage=$(free -b | awk '/Mem:/ {print int($3/$2 * 100.0)}')
# 获取总内存大小 (GB)
mem_total_gb=$(free -b | awk '/Mem:/ {printf "%.1f", $2/1024^3}')
# 获取已使用内存大小 (GB)
mem_used_gb=$(free -b | awk '/Mem:/ {printf "%.1f", $3/1024^3}')
# 获取 SWAP 总大小 (byte)
swap_total=$(free -b | awk '/Swap:/ {print $2}')
# 获取 SWAP 使用率 (%)
swap_usage=$(free -b | awk '/Swap:/ {if($2 > 0) print int($3/$2 * 100.0); else print 0;}')
# 获取 SWAP 总大小 (GB)
swap_total_gb=$(free -b | awk '/Swap:/ {printf "%.1f", $2/1024^3}')
# 获取已使用 SWAP 大小 (GB)
swap_used_gb=$(free -b | awk '/Swap:/ {printf "%.1f", $3/1024^3}')
current_time=$(date +"%Y-%m-%d %H:%M:%S")
# 如果启用了 SWAP 检查并且系统有 SWAP 空间, 则检查 SWAP 使用率
if [ "$CHECK_SWAP" = True ] && [ $swap_total -gt 0 ]; then
if [ $swap_usage -gt $THRESHOLD ]; then
# 如果 SWAP 使用率超过阈值, 则重启服务
sudo systemctl stop $SERVICE_NAME
sudo systemctl start $SERVICE_NAME
echo "The $SERVICE_NAME has been restarted."
echo "[$current_time] Restarted $SERVICE_NAME due to high swap usage: $swap_usage% (${swap_used_gb}GB/${swap_total_gb}GB)"
exit 0
fi
elif [ $mem_usage -gt $THRESHOLD ]; then
# 如果内存使用率超过阈值, 则重启服务
sudo systemctl stop $SERVICE_NAME
sudo systemctl start $SERVICE_NAME
echo "The $SERVICE_NAME has been restarted."
echo "[$current_time] Restarted $SERVICE_NAME due to high memory usage: $mem_usage% (${mem_used_gb}GB/${mem_total_gb}GB)"
exit 0
fi
# 打印当前内存和 SWAP 使用情况
echo "[$current_time] Current memory usage: $mem_usage% (${mem_used_gb}GB/${mem_total_gb}GB)"
if [ $swap_total -gt 0 ]; then
echo "[$current_time] Current swap usage: $swap_usage% (${swap_used_gb}GB/${swap_total_gb}GB)"
fi
赋予执行权限
chmod +x /home/steam/check-palworld-memory.sh
运行测试
./check-palworld-memory.sh
使用 cron 定期运行。每 30 分钟检查一次内存使用率, 如果超过阈值, 则重新启动服务。
crontab -e
*/30 * * * * /home/steam/check-palworld-memory.sh
备份游戏存档指南
对于 RPG 类型的游戏来说, 存档数据至关重要。定期备份可以帮助我们在以下情况中快速回档、减少损失
- 游戏出现严重 BUG, 导致无法进入游戏
- 队友误操作, 例如拆家
- 挂狗破坏基地
- 在离线时遇到入侵事件
- 孵蛋或配种失败, 导致优秀父代遗失
📦 备份存档
手动完整备份
在更新升级服务器时使用, 将 /home/steam/PalServer
目录完整打包压缩为 tar.xz
文件, 保存在 save_backup
目录下。
tar -Jcf save_backup/palworld_server_v3.10.tar.xz -C /home/steam PalServer
自动备份配置 (Cron 任务)
- 每 30 分钟自动备份一次
SaveGames
文件夹, 并带上时间戳命名 - 每天凌晨 1 点清理超过 30 小时以上的旧备份, 避免硬盘占满
备份脚本
vim backup-palworld.sh
填入以下内容
#!/bin/bash
# Define source directory and backup directory
SOURCE_DIR="/home/steam/PalServer/Pal/Saved"
BACKUP_DIR="/home/steam/save_backup"
DATE=$(date +\%F_\%H-\%M-\%S)
# Create a xz compressed tarball
# /usr/bin/tar -Jcf /home/steam/save_backup/auto_palworld_$(date +\%F_\%H-\%M-\%S).tar.xz -C /home/steam/PalServer/Pal/Saved SaveGames
tar -Jcf "${BACKUP_DIR}/auto_palworld_${DATE}.tar.xz" -C "${SOURCE_DIR}" SaveGames
echo "Backup of ${SOURCE_DIR} completed at ${BACKUP_DIR}/auto_palworld_${DATE}.tar.xz"
赋予执行权限
chmod +x /home/steam/backup-palworld.sh
运行测试
./backup-palworld.sh
设置定时执行
crontab -e
*/30 * * * * /home/steam/backup-palworld.sh
0 1 * * * find /home/steam/save_backup/ -name "auto_palworld*.tar.xz" -mmin +1800 -exec rm -f {} \;
🔄 恢复存档
完整备份恢复。解压备份文件到 /home/steam
目录, 恢复原始存档结构。
# 恢复备份前, 先停止服务器
systemctl stop palworld
tar -xJvf save_backup/palworld_server_v3.10.tar.xz -C /home/steam
systemctl restart palworld
原文
最大32人 パルワールド Linux 専用サーバの立て方
Deploy dedicated server
Palworld Server Guide - Configuration file
Github - palworld-worldoptions