0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

cronでminecraftサーバー起動のbat処理がうまく動作しないときの対処法

Posted at

概要

cronからFabric製Minecraftサーバーを自動起動しようとした際、screen上でサーバーが正しく起動しない事象が発生した。手動で実行する際は成功するにも関わらず、cronや他ディレクトリから実行すると失敗する。この原因と対処方法について記録する。


現象

以下のcronジョブを設定。

0 21 * * * /home/ubuntu/survival/restart.sh

このジョブは screen 上でFabricサーバーを起動するシェルスクリプトである。
スクリプトを /home/ubuntu/survival ディレクトリ内で手動実行すれば正常に起動するが、/home/ubuntu など別ディレクトリで実行すると起動しない。


原因

Java製のMinecraftサーバーは、実行時の「カレントディレクトリ(作業ディレクトリ)」に依存して、modsやconfig、worldデータなどを読み込もうとする。
スクリプト内で cd を明示しないと、cronなどでの実行時には意図しないディレクトリ(例: //home/ubuntu)から起動されるため、必要なリソースが見つからず異常終了する。


対処法

スクリプト内で cd を明示的に指定する。

#!/bin/bash

# 設定
SCREEN_NAME="fabric-server"
JAR_FILE="fabric-server-mc.1.20.1-loader.0.16.10-launcher.0.11.2.jar"

# サーバーディレクトリへ移動
cd /home/ubuntu/survival || exit 1

# すでにscreenが存在する場合は何もしない
if screen -list | grep -q "$SCREEN_NAME"; then
    echo "The server is already running in screen session: $SCREEN_NAME"
    exit 1
fi

# サーバーをscreenで起動
echo "Starting Fabric server in screen session: $SCREEN_NAME"
screen -dmS $SCREEN_NAME java -jar $JAR_FILE nogui

echo "Fabric server started successfully."

必要であれば、cron用に PATHJAVA_HOME をスクリプト内で明示することも検討する。


補足:cron環境での注意点

  • cronは非常に最小限の環境変数しか持たない
  • .bashrc.profile に記載されたPATHは反映されない
  • screenjava コマンドがパスで解決できない場合があるため、絶対パスで記述するか、環境変数を設定すること
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?