KeepWorlds

パルワールド専用サーバーのアップデート方法:バージョン不一致とセーブを守る手順

パルワールドのクライアントは自動でアップデートされますが、専用サーバーは自分で上げない限り古いままです。新しいビルドが出たかの確かめ方、告知 → 強制保存 → 停止 → アップデート → 起動の順序、そしてアップデート後にワールドが開かないときの戻し方まで。

パルワールドのクライアントは Steam が勝手に上げてくれますが、専用サーバーは誰も上げてくれません。 だからパッチ配信日の光景はいつも同じです。昨日まで問題なかったサーバーに突然誰も入れなくなり、接続はいつもより長く待たされたあとタイトル画面に戻されます。この記事は、パルワールドのサーバーをセーブを失わない順序でアップデートする方法です。サーバーをまだ立てていないなら構築ガイドからどうぞ。

バージョンがずれるとプレイヤーには何が見えるか

バージョン不一致は親切なエラーメッセージでは来ません。だからホストが最初に疑うのはたいていポートかファイアウォールで、本当の原因はビルド番号です。

見えるもの実際に起きていること
接続が長く待たされたあとタイトル画面に戻るクライアントは新しいバージョン、サーバーは古いビルド
バージョンが違うという案内が出る原因は同じ。出るパッチと出ないパッチがあります
コミュニティ一覧からサーバーが消える一覧はバージョンで絞られるので、古いビルドは載りません
一人二人だけ入れないこれはバージョンの問題ではありません。接続トラブルの切り分けの話です

最後の行が判別線です。全員が同時に入れないならバージョン、一人二人ならその人の環境です。パッチ配信後の数日は前者が圧倒的に多くなります。

確認は二か所を見比べるだけです。ゲームのメインメニュー隅のバージョン表記と、サーバーの起動ログに出るバージョンです。REST API を有効にしてあるなら GET /v1/api/info がサーバーのバージョンをそのまま返します(REST API の使い方)。

新しいビルドが出たかを確かめる

専用サーバーの App ID は 2394010 です。ゲーム本体(1623730)とは別の番号で、配信も別に行われます。いま入っているビルド番号は、インストール先のマニフェストに書かれています。

grep buildid /home/palserver/palworld/steamapps/appmanifest_2394010.acf

Steam がいま配信しているビルド番号は SteamCMD に尋ねます。

steamcmd +login anonymous +app_info_update 1 +app_info_print 2394010 +quit \
  | grep -A 5 '"public"'

branchespublic の下の buildid が現在配信中の番号、timeupdated がそれが出た時刻です。二つの数字が違えば、適用すべきものがあるということです。

ただしこの比較を毎回手でやる必要はありません。validate を付けた app_update は、すでに最新なら実質何もしません。 つまり「新しいものがあるか」という判断そのものを SteamCMD に任せてしまえます。比較が役に立つ場面は一つだけで、いま人が入っているときに、告知を出してまで止める価値があるかを先に知りたいときです。

手順:告知 → 強制保存 → 停止 → アップデート → 起動

この五段階の順序がこの記事の中身です。どれか二つを入れ替えると、必ず何かを失います。

PW='十分に長いパスワード'
API='http://127.0.0.1:8212/v1/api'

# 1. 告知:いま入っている人に時間を渡す
curl -s -u "admin:$PW" -X POST "$API/announce" \
     -H 'Content-Type: application/json' \
     -d '{"message":"Server updates in 5 minutes"}'
sleep 300

# 2. 強制保存:メモリ上のワールドをディスクに書き出す
curl -s -u "admin:$PW" -X POST "$API/save"
sleep 10

# 3. 停止:プロセスが完全に落ちてから次へ
sudo systemctl stop palworld

# 4. バックアップはここで(次節)

# 5. アップデート
sudo -u palserver steamcmd +force_install_dir /home/palserver/palworld \
     +login anonymous +app_update 2394010 validate +quit

# 6. 起動
sudo systemctl start palworld

REST API をまだ有効にしていない場合は、先に PalWorldSettings.iniRESTAPIEnabled=TrueAdminPassword を入れてください。認証は HTTP Basic でユーザー名は常に admin、そしてファイアウォールで8212を開けないでください。開発元はこの API をインターネットに直接公開する設計ではないと明言しています。

補足が三つあります。

  • サーバーが起動したまま app_update を走らせないでください。 Linux は実行中のプログラムのファイルを上書きしても止めてくれません。プロセスは古いバイナリのまま動き、ディスク上のファイルだけ新しくなるという中途半端な状態になり、それは次の再起動のときに初めて表に出ます。
  • validate は毎回付けてください。 ファイル整合性の検証が入るぶん少し時間はかかりますが、途中で切れたダウンロードが残した壊れたファイルはこのオプションでしか見つかりません。
  • アップデート中は誰も入れません。 容量の大きいパッチは数分かかるので、みんなが集まって待っている時間に始めないでください。

アップデート直前の完全なバックアップ一回

セーブの形式はバージョンで変わることがあり、一度新しいビルドで開いたワールドを古いビルドに戻すことはできません。 だからこのバックアップは「毎日一回」とは別枠で、アップデートの直前に手で一回必要です。ふだんは一度も使いませんが、使う日が来たらそれが全部です。

コピーするのはワールドのフォルダごと。サーバーを停止したあとでコピーしてください。

sudo systemctl stop palworld
sudo -u palserver cp -a \
     /home/palserver/palworld/Pal/Saved/SaveGames/0/<WorldID> \
     /home/palserver/backups/pre-update-$(date +%F)

<WorldID> はサーバーが初回起動時に作った十六進数のフォルダ名です。その中の Level.sav だけをコピーしたバックアップから復元すると、全員が新規キャラクターとして始まります。 マップも拠点もそのままなのに、持ち主だけがいなくなるのです。Players/ も一緒に持っていく理由と復元の順序はセーブデータの保存場所とバックアップ、復元の手順にあります。

アップデート後にワールドが開かないとき

まず三つのどれかに仕分けてください。対処がまったく違います。

症状確認方法原因
サーバーがそもそも起動しないjournalctl -u palworld -n 100ファイルの破損か、読めない設定ファイル
起動したが中身のない新しいワールドになっているSaveGames/0/ の下にフォルダが増えていないか元のフォルダを読めず、新しく作った
サーバーは正常なのに全員入れないバージョンの比較今度はクライアント側がまだ上がっていない

真ん中がいちばん驚く症状ですが、実際には何も消えていません。元の <WorldID> フォルダはそのまま残っていて、サーバーがそれを読まなかっただけです。元のフォルダは消さないでください。

戻し方は「古いビルドに下げる」ではなく、アップデート直前のバックアップを新しいビルドの上に復元するです。理由は二つ。クライアントはすでに新しいバージョンに上がっているので古いビルドのサーバーにはどのみち誰も入れませんし、ワールドが開かない事故の大半は形式の変更ではなく、きれいに止まらなかったせいで途中まで書かれたセーブだからです。SteamCMD には特定のビルドを取得する download_depot がありますが、depot ID と manifest ID を自分で調べる必要があり、上の理由から得るものはほとんどありません。

復元の順序はこうです。サーバーを停止し、いまある <WorldID> フォルダを消さずに別名へ退避し、バックアップを元の名前で戻して、起動します。ワールドが開いたら、退避したフォルダは数日様子を見てから片付けてください。

Windows と Linux の違い

違うのはコマンドと道具だけで、順序は同じです。

LinuxWindows
停止sudo systemctl stop palworldREST API で告知と保存をしてから Stop-Process -Name PalServer-Win64-Shipping
アップデートsteamcmd +force_install_dir /home/palserver/palworld +login anonymous +app_update 2394010 validate +quitC:\steamcmd\steamcmd.exe +force_install_dir C:\palworld-server +login anonymous +app_update 2394010 validate +quit
セーブの場所/home/palserver/palworld/Pal/Saved/SaveGames/0/C:\palworld-server\Pal\Saved\SaveGames\0\
起動したまま実行すると止められず中途半端に成功します。だから危険なのはこちらですファイルがロックされていて SteamCMD が失敗します
自動化systemd と cronタスクスケジューラ

Windows にはもう一つ落とし穴があります。Steam クライアントのツール一覧からサーバーを入れた場合、Steam が動いているサーバーの下で勝手にアップデートすることがあります。 それはまさに書きかけのセーブを作る手順です。そのアプリの自動アップデートの設定を見直すか、いっそ SteamCMD だけで管理してください。

毎日の定時再起動にアップデートを組み込む

どのみちサーバーは一日一回止める必要があります。パルワールドのサーバーには未修正のメモリリークがあり、定時再起動は選択肢ではなく前提だからです(メモリリークと定時再起動)。どうせ止めるのですから、起動のたびにバージョンを確認させても追加のコストはほぼゼロです。

# palworld.service の [Service] セクションに追加
TimeoutStartSec=30min
ExecStartPre=/usr/games/steamcmd +force_install_dir /home/palserver/palworld +login anonymous +app_update 2394010 validate +quit

深夜の再起動がそのままバージョン確認になります。パッチ配信日の朝にはサーバーはもう新しいビルドで、配信のない日も validate が全ファイルを確かめるぶん、起動に一、二分余計にかかります。TimeoutStartSec は省かないでください。Type=simple でも systemd の既定の起動タイムアウト90秒は ExecStartPre に効くので、大きなパッチのダウンロードがそれを超えると途中で打ち切られ、サーバーは起動しません。その「毎日一回止める」自体をどう組むか——起動時の自動実行や落ちたときの自動復帰と合わせて——はパルワールドのサーバーを24時間動かし続けるにあります。

ただしこの一行に足りないものがあります。アップデートの前にバックアップを取りません。 なので、再起動の直前にバックアップが一度回る構成と組にして初めて安全になります。バックアップのない無人アップデートは、何か月もうまく回ったあとに一度で大きく失う側の仕組みです。

よくある質問

パルワールドのサーバーはどうやってアップデートするのですか?

順序がすべてです。ゲーム内に告知を出し、REST API で強制保存し、サーバープロセスを停止し、ワールドのフォルダをまるごとバックアップしてから sudo -u palserver steamcmd +force_install_dir /home/palserver/palworld +login anonymous +app_update 2394010 validate +quit を実行して起動し直します。+force_install_dir はインストール先を指し、+login より前に置きます。抜けると SteamCMD は別の場所にもう一式ダウンロードし、サーバーは古いビルドのままです。動いているサーバーの上に上書きしてはいけませんし、バックアップはアップデートの後ではなく前です。

アップデートするとセーブデータは消えますか?

正しい手順なら消えません。アップデートが置き換えるのはサーバーのプログラムファイルだけで、Pal/Saved/SaveGames/ の中には触れません。危ないのはアップデートそのものではなく、保存の途中でプロセスを殺すことです。強制保存 → 停止 → アップデートの順を守り、その直前にワールドのフォルダを一度まるごとコピーしておいてください。

アップデート後にサーバーへ入れないのはなぜですか?

全員が同時に入れないなら、ほぼバージョンのずれです。サーバーが古いビルドのままのこともあれば、逆にサーバーだけ上がっていて誰かの Steam がまだクライアントを上げていないこともあります。サーバーの起動ログのバージョンと、ゲームのメインメニュー隅のバージョンを見比べて、どちらが遅れているかから確かめてください。一人二人だけなら、バージョンではなくアドレスかポートの話です。

パルワールドの専用サーバーは自動でアップデートされますか?

既定ではされません。Steam が上げてくれるのはクライアントだけで、サーバーはそのまま残ります。systemd の ExecStartPre に SteamCMD の一行を入れて(大きなダウンロードが打ち切られないよう TimeoutStartSec も延ばして)起動のたびに検証させることはできますが、それだけではアップデート前のバックアップがありません。無人で回すなら、バックアップまで同じ流れの中に入っている必要があります。

レンタルサーバーならアップデートはワンクリック

上の手順に難しい段階は一つもありません。難しいのは、パッチが出るたびに誰かがそれに気づいていなければならないことです。パルワールドは配信が多く、たいてい平日の昼に出て、その時間にサーバーを立てた本人は学校か仕事です。だから発覚するのは夜、みんなで入ろうとしたその瞬間で、そこからバックアップしてアップデートするのにまた時間がかかります。

KeepWorldsパルワールド専用サーバーなら、気づく役目はシステムが引き受けます。バージョンガードは新しいバージョンが公開されると自動で検知し、コンソールのサーバーページでお知らせします。「今すぐアップデート」を押せば、あとは順番どおりです。先にセーブデータをバックアップしてからアップデートして、サーバーを復帰させます。いつ止めるかは自分で決められるので、遊んでいる途中で切られることはありません。停止の前にはゲーム内にサーバーアナウンスが流れ、カウントダウンを終えて強制保存まで済ませてから止まるので、入っていた人も進行を失いません。バックアップはコンソールのマイサーバーに時点ごとに並び、戻りたい時点を選んで復元できます。

他の言語で読む

自分で運用しない方法もあります

ゲームとプランを選ぶだけで、専有マシン上にサーバーが立ち上がります。バックアップ、アップデート、期限のお知らせはこちらで対応いたします。

プランを見る