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)