Resoniteになってからヘッドレスを動かすようになった

廉価なミニPCでもそこそこ使えているので個人的な記録も兼ねて紹介する

使用機器

KNT-HDL

TRIGKEY G5

N100 / 32GB DDR5 / 500GB SSD

Windows 11 Pro

KNT-HDL2

TRIGEKY S5

Ryzen 7 5800H / 32GB DDR4 / 500GB SSD

Ubuntu 24.04.1 LTS

主な用途

KNT-HDL

日~月 ラジオ体操 第1セッション

日 Creator Jam [Session 02] JP

KNT-HDL2

個人の作業場、ワールド散策のためのヘッドレス

使ってるmod

https://github.com/bontebok/ResoniteIPv6Mod

https://github.com/New-Project-Final-Final-WIP/HeadlessTweaks

(ヘッドレスがNet9になってからはこれらのmodはつかえてない)

ヘッドレスの自動起動・終了

KNT-HDL

Windowsのタスクスケジューラーでヘッドレスの起動をしています

終了はPythonスクリプトでヘッドレスのターミナルにshutdownコマンドをたたき込むようにしてます(このスクリプトもWindowsのタスクスケジューラーで起動してる)

import pygetwindow as gw
import pyautogui
import time

windows = gw.getWindowsWithTitle("C:\\\\Program Files (x86)\\\\Steam\\\\steamapps\\\\common\\\\Resonite\\\\Headless\\\\Resonite.exe")

if windows:
    window = windows[0]
    window.activate()
   
    time.sleep(0.5)
    pyautogui.typewrite("close\\nworlds\\n", interval=0.05)

    time.sleep(0.5)
    pyautogui.typewrite("\\nshutdown\\n", interval=0.05)
else:
    print("指定のタイトルのウィンドウが見つかりませんでした。")

KNT-HDL2

https://gist.github.com/bredo228/ac063763f6acf35532716d66c2313821

このシェルスクリプトのdotnet Resoniteの行を下記のように書き換えてscreenのセッションで実行

screen -S headless -U -d -m dotnet Resonite.dll \\

-LoadAssembly Libraries/ResoniteModLoader.dll \\

-headlessconfig Config/Config02.json

終了するときは下記のシェルスクリプトで終了させてる

#!/bin/sh

# === 設定 ===
# サーバ終了までの待ち時間
WAIT0=30
WAIT=300
# screenの名前
SCREEN_NAME='headless'
# ============

# 鯖を止める
screen -p 0 -S ${SCREEN_NAME} -X eval 'stuff "shutdown\\015"'

# WAIT 秒待ってから
sleep $WAIT0

if ! pgrep dotnet > /dev/null; then
  exit 1  # スクリプトを終了する
fi

# WAIT 秒待ってから
sleep $WAIT

if ! pgrep dotnet > /dev/null; then
  exit 1  # スクリプトを終了する
else
  killall dotnet
fi

上記のヘッドレスの起動・終了のシェルスクリプトはcronに設定してある

参考

ヘッドレスサーバーの立て方

【手順解説】Resoniteヘッドレスサーバの建て方!|aki RAM (akiRAM)

Resonite Wiki / Headless Server Software

https://wiki.resonite.com/Headless_Server_Software