鯖ドリル

※本記事にはアフィリエイト広告(PR)が含まれています

Palworld

Palworld専用サーバーの運用|パスワード設定・参加方法・更新・負荷の見かた

Oracle A1に立てたPalworld専用サーバーを、実際に運用するための手順。PalWorldSettings.iniでのパスワードとサーバー名の設定、参加者の入り方、管理者コマンドでの安全な停止、DepotDownloaderでのバージョンアップ、CPUとメモリの正しい測り方までまとめます。

#Palworld#Oracle Cloud#Linux#systemd#運用#ゲームサーバー
目次

Palworld専用サーバーを立てたあとの、日々の運用をまとめます。

対象は、box64で立てる手順まで終わっている状態です。

この記事でやること

  • パスワードとサーバー名を設定する(起動引数には書かない)
  • 参加者に入ってもらう
  • 保存してから安全に停止する
  • バージョンアップする
  • CPUとメモリを正しく測る

設定ファイルの編集は、WinSCP(GUI)を使う方法をおすすめします。ターミナルでの編集もできますが、Palworldの設定は長い1行に詰め込まれていて非常に読みづらいためです。両方の方法を載せます。

パスワードとサーバー名を設定する

編集するのは次のファイルです。DefaultPalWorldSettings.ini を直接編集しても反映されません。

~/palworld/server/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini

初回だけ、雛形をコピーして土台を作ります。

cd ~/palworld/server
mkdir -p Pal/Saved/Config/LinuxServer ~/palworld/backups

# 既存の設定があれば先に退避する
cp -a Pal/Saved/Config/LinuxServer/PalWorldSettings.ini \
  ~/palworld/backups/PalWorldSettings.ini.before-edit-$(date +%F-%H%M%S) 2>/dev/null || true

cp DefaultPalWorldSettings.ini Pal/Saved/Config/LinuxServer/PalWorldSettings.ini
chmod 600 Pal/Saved/Config/LinuxServer/PalWorldSettings.ini

編集はWinSCPが圧倒的にラク(おすすめ)

このファイルは OptionSettings=(...) が全項目を詰め込んだ長い1行です。ターミナルのエディタで目的の値を探すのは、正直かなりつらい作業です。

WinSCP(無料・Windows向け)を使えば、使い慣れたエディタで開けます。接続の手順はWinSCPの使い方にまとめました。

注意: FFFTPでは繋がりません(SFTP非対応)。SFTPに対応したクライアントが必要です。

接続したら、次のフォルダを開きます。

/home/ubuntu/palworld/server/Pal/Saved/Config/LinuxServer/

WinSCPでLinuxServerフォルダを開き、PalWorldSettings.iniを選択した画面

PalWorldSettings.ini右クリック →「編集」。エディタが開くので、Ctrl+F で項目を探して書き換え、保存すればそのまま反映されます。

WinSCPの内蔵エディタで開いたPalWorldSettings.ini。OptionSettingsが長い1行になっている

書き換えるのは次の4つです。新しい行を足すのではなく、既存の項目の値を置き換えます。

ServerName="好きなサーバー名"
ServerPassword="参加者用パスワード"
AdminPassword="管理者専用の別パスワード"
bIsUseBackupSaveData=True
  • ServerPassword: 参加者が接続時に入力するパスワード
  • AdminPassword: 管理コマンド用。参加用とは別の強い値にする
  • bIsUseBackupSaveData=True: ゲーム内の自動バックアップを有効化(容量は増える)

注意: パスワードは起動引数に書きませんps やログから見えてしまいます。sed やコマンドラインに直接書くのも避けてください。シェル履歴に残ります。 エディタで入力するのが安全です。

ターミナルで編集する場合(nano)

WinSCPを使わないなら nano で開きます。

nano ~/palworld/server/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini

Ctrl+W で項目を検索できます。ただし折り返しのない長大な1行なので、目的の値を見つけるだけでも一苦労です。

先に中身を読みたいときは、閲覧用の整形コピーを作ると楽になります。

CONFIG=~/palworld/server/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini
perl -pe 's/,(?=[A-Za-z][A-Za-z0-9_]*=)/,\n/g' "$CONFIG" \
  > ~/palworld/PalWorldSettings.readable.txt
less ~/palworld/PalWorldSettings.readable.txt

less では /ServerPassword のように / で検索し、q で終了します。

これは読むためだけのコピーです。 改行を入れたまま PalWorldSettings.ini へ上書きしないでください。

反映する

設定を保存したら、サーバーを再起動します。

sudo systemctl restart palworld

入り方(参加者)

Palworldクライアントで 「マルチプレイゲームに参加」 を開きます。画面の下部に直接接続の入力欄があります。

Palworldのサーバー一覧画面。下部に「パスワードを入力する」チェックと接続先の入力欄がある

手順は次のとおりです。

  1. 入力欄の左にある 「パスワードを入力する」にチェックを入れる
  2. 接続先へ <公開IP>:8211 を入力する
  3. 接続を押す
  4. パスワード入力画面が出るので、ServerPassword を入れて確定

パスワード入力画面。「パスワードを保存」にチェックを入れると次回から省ける

「パスワードを保存」にチェックを入れておくと、次回から入力を省けます。

つまずきポイントチェックを入れずに接続すると弾かれます。 No password has been entered. と表示されますが、これはIPやファイアウォールの問題ではありません。クライアントがパスワードを送っていないだけです。

当方はパブリックIPへの直接接続でログインできました。サーバー一覧に載せる -publiclobby は必須ではありません。

管理者として保存してから停止する

ゲーム内で Enter を押し、まず管理者権限を取得します。

/AdminPassword <AdminPasswordに設定した値>
/Save

メンテナンス告知を出して安全に終了する場合は、続けて次を入力します。

/Shutdown 60 60秒後にメンテナンスのため再起動します

/Shutdown は指定秒数後に参加者へメッセージを表示して停止します。急停止の /DoExit は障害時だけに使います。/Save/Shutdownなどの管理コマンドは、設定ファイルに AdminPassword を置き、ゲーム内で /AdminPassword を実行したあとに使えます。

バージョンアップする

アップデート中にセーブデータを壊さないため、保存 → 停止 → バックアップ → ダウンロード → 起動の順にします。参加者がいる場合は、先にゲーム内で/Shutdownを使って告知します。

# 1. ゲーム内で /Save を実行したあと、サーバーを停止
sudo systemctl stop palworld

# 2. ワールドと設定を日付付きでバックアップ
mkdir -p ~/palworld/backups
tar -C ~/palworld/server \
  -czf ~/palworld/backups/palworld-full-$(date +%F-%H%M%S).tar.gz \
  Pal/Saved

# 3. 最新版を取得して整合性も確認
~/palworld/tools/depotdownloader/DepotDownloader \
  -app 2394010 -os linux -osarch 64 \
  -dir ~/palworld/server -validate
chmod +x ~/palworld/server/PalServer.sh \
  ~/palworld/server/Pal/Binaries/Linux/PalServer-Linux-Shipping

# 4. 起動して待受を確認
sudo systemctl start palworld
sudo systemctl status palworld --no-pager
sudo ss -lunp | grep ':8211'

DepotDownloaderは最新の配布内容を取得し、-validateで既存ファイルも検証します。バックアップは SaveGames の一部分ではなく、設定を含む Pal/Saved 全体 を一つのアーカイブにします。これなら、ワールド、プレイヤー別データ、ゲーム内自動バックアップ、Dedicated Serverの設定を同じ時点の組として戻せます。

更新したら起動しなくなったとき(実体験)

アップデート後、サーバーが起動しなくなりました。ログにはこう出ていました。

起動失敗ログ。Game versionの10秒後に free(): invalid next size (normal) が出ている

free(): invalid next size (normal) はメモリ管理の異常で、プロセスがそのまま固まります。停止しようとしても応答せず、stop-sigterm timed out. Killing. と表示されて強制終了になりました。この停止時のエラーは結果であって、原因ではありません。

原因は、更新時のダウンロードが不完全だったことでした。次のように -validate を付けて取得し直したら、あっさり直りました。

sudo systemctl stop palworld

# 壊れたファイルを検出して修復する
~/palworld/tools/depotdownloader/DepotDownloader \
  -app 2394010 -os linux -osarch 64 \
  -dir ~/palworld/server -validate

chmod +x ~/palworld/server/PalServer.sh \
  ~/palworld/server/Pal/Binaries/Linux/PalServer-Linux-Shipping

sudo systemctl start palworld

ポイント — 更新時は最初から -validate を付けておくと、この事故を避けられます。ダウンロードが途中で欠けても、その場で検出して直してくれます。

再起動する前に、壊れたプロセスが残っていないかも確認します。残っているとUDP 8211を掴んだままで、次の起動が失敗します。

pgrep -af 'PalServer|box64'           # 残っていないか確認
sudo pkill -9 -f 'PalServer|box64'    # 残っていたら強制終了

なお、ARM上でbox64を使う環境では、メモリ順序の違いに起因する同種のクラッシュも報告されています。-validate で直らない場合は、BOX64_DYNAREC_STRONGMEM=1(効かなければ 23)を付けて起動する方法や、box64本体を最新へ更新する方法が候補になります。当方の環境では -validate だけで解決したため、こちらは未検証の情報です。

負荷とメモリを記録する

free -hused はPalworld単体の使用量ではありません。OS、ほかのゲームサーバー、ファイルキャッシュを含むホスト全体です。次の3層を同じ時刻に記録すると、何がメモリを使っているかを切り分けられます。

1. ホスト全体:あと何GiB使えるか

free -h
swapon --show

重要なのは available です。起動直後・1人接続・複数人接続・全員退出後で比較します。used はLinuxのキャッシュも含むため、単独では判断に使いません。

2. サービス単位:Palworldとほかのゲームを比較する

# 1回だけ表示する。CPU・メモリをcgroup(サービス)単位で確認
sudo systemd-cgtop -b -n 1 -m

# 稼働中のゲーム関連サービスを確認
systemctl list-units --type=service --state=running \
  | grep -Ei 'palworld|valheim|minecraft|paper|geyser|bds|core'

# Core KeeperをDockerで動かしている場合は、コンテナ単位でも確認
docker stats --no-stream

systemd化したPalworldは palworld.service として表示されます。Valheim、Minecraft、BDSなどもsystemdなら同じ表で比較できます。Core KeeperがDockerなら docker statsMEM USAGE / LIMIT がコンテナ単位の値です。systemd-cgtop の親行(system.sliceなど)には子サービス分も含まれるため、行のメモリ値を足し算してはいけません。ホスト全体の値は free -h、個別の比較は子サービスやDockerコンテナの行で行います。

3. プロセス単位:実行ファイルごとのRSSを確認する

# メモリ(RSS)が大きい順に、上位30プロセスを一覧
ps -eo pid,user,comm,%cpu,%mem,rss,etime,args --sort=-rss | head -n 31

# ゲームサーバーらしいプロセスだけを絞り込み
pgrep -af 'PalServer|valheim_server|CoreKeeper|java|bedrock_server'

RSSは実メモリの目安で、単位はKiBです。たとえば rss4194304 なら約4GiBです。MinecraftはJavaプロセスとして見えるため、args 列でPaperなど対象サーバーかを確認します。

Palworldだけを記録する場合は次のようにします。

PID=$(pgrep -f 'PalServer-Linux-Shipping' | head -n 1)
ps -p "$PID" -o pid,%cpu,%mem,rss,etime,args

起動直後、1人接続、複数人接続、全員退出後の4点で、ホストの available、サービス/コンテナのメモリ、対象プロセスのRSSをセットで残します。これで「Palworldが増えたのか」「ほかのゲームが残っているのか」「単にLinuxキャッシュが増えたのか」を分けて判断できます。

実際に測るとこうなります。ホスト全体・Dockerコンテナ・対象プロセスを、同じタイミングで並べて記録した例です。

free -h と ps の実測。Palworld単体のRSSが約5.0GiB、ホストの空きは15GiB、スワップ0

まとめ

  • パスワードは起動引数ではなく設定ファイルへ。psやログに残さない
  • 参加者は直接接続。Enter password を有効にしないと弾かれる
  • 更新は保存 → 停止 → バックアップ → 取得 → 起動の順。chmod +x を忘れない
  • free -hused はホスト全体。プロセス単位のRSSまで見て切り分ける

セーブデータのバックアップと復元は → Palworldのセーブデータをバックアップ・復元する