Created
August 2, 2011 04:28
-
-
Save ariela/1119604 to your computer and use it in GitHub Desktop.
minecraftのサーバ起動スクリプト(centosでのみテスト)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# | |
# minecraft Startup script for the minecraft Server | |
# | |
# chkconfig: - 90 25 | |
# description: Minecraft is Sandbox game server. | |
# processname: minecraft | |
# パス設定 ========================================================================================= | |
MC_PATH_HOME="/opt/minecraft" # minecraftサーバの基本位置 | |
MC_PATH_SERVER="${MC_PATH_HOME}/server" # サーバプログラム位置 | |
MC_PATH_SERVER_BACKUP="${MC_PATH_SERVER}/backup" # サーバプログラムバックアップ位置 | |
MC_PATH_DATA="${MC_PATH_HOME}/data" # サーバデータ位置 | |
MC_PATH_DATA_BACKUP="${MC_PATH_DATA}/backup" # サーバデータバックアップ位置 | |
MC_PATH_PLUGIN="${MC_PATH_DATA}/plugins" # プラグイン位置 | |
MC_PATH_TMP="${MC_PATH_HOME}/tmp" # テンポラリ位置 | |
MC_PATH_TMP_UPDATE="${MC_PATH_TMP}/update" # 更新用テンポラリ位置 | |
MC_PATH_TMP_PATCH="${MC_PATH_TMP}/patch" # パッチ用テンポラリ位置 | |
# マシン設定 ======================================================================================= | |
MC_USE_CPU=2 # GCに使用するCPU数 | |
MC_USE_MEM_MIN="2048M" # 割り当てるメモリ容量(初期) | |
MC_USE_MEM_MAX="2048M" # 割り当てるメモリ容量(最大) | |
# サーバ設定 ======================================================================================= | |
MC_USER="minecraft" # サーバプログラムの実行ユーザ | |
MC_SERVICE="minecraft_server.jar" # サーバプログラム名 | |
MC_SERVICE_NAME="Ariela Server" # サーバの識別用名 | |
MC_OPTION="nogui" # サーバプログラムオプション | |
MC_STOP_INTERVAL=60 # サーバ停止時の待ち時間 | |
MC_SCREENNAME="minecraft-server" # screenの名称 | |
# minecraftを実行するコマンド ====================================================================== | |
MC_INVOCATION="java -Xms${MC_USE_MEM_MIN} -Xmx${MC_USE_MEM_MAX} -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=${MC_USE_CPU} -XX:+AggressiveOpts -jar ${MC_PATH_SERVER}/${MC_SERVICE} ${MC_OPTION}" | |
# バックアップ設定 ================================================================================= | |
MC_BACKUP_FILE=`date '+%Y%m%d-%H'` | |
MC_BACKUP_PREF_WORLD="world-" | |
MC_BACKUP_PREF_NETHER="nether-" | |
MC_BACKUP_PREF_SERVER="server-" | |
MC_BACKUP_NAME_WORLD="world" | |
MC_BACKUP_NAME_NETHER="world_nether" | |
# 更新設定 ========================================================================================= | |
MC_DOWNLOAD_JP_FILE="jp.zip" | |
#CraftBukkitの場合 | |
MC_DOWNLOAD_FILE="craftbukkit-0.0.1-SNAPSHOT.jar" | |
MC_DOWNLOAD_URI="http://ci.bukkit.org/job/dev-CraftBukkit/lastSuccessfulBuild/artifact/target/craftbukkit-0.0.1-SNAPSHOT.jar" | |
MC_DOWNLOAD_JP_URI="http://zeeksphere.sakura.ne.jp/minecraft/LangXForBukkit104.zip" | |
#公式サーバの場合 | |
#MC_DOWNLOAD_FILE="minecraft_server.jar" | |
#MC_DOWNLOAD_URI=http://www.minecraft.net/download/minecraft_server.jar?v=`date | sed "s/[^a-zA-Z0-9]/_/g"` | |
#MC_DOWNLOAD_JP_URI="http://zeeksphere.sakura.ne.jp/minecraft/JaModForOfficialServer.zip" | |
# プラグイン更新 =================================================================================== | |
MC_PLUG_TRANSPORTER_URL="http://bukkit-transporter.googlecode.com/files/Transporter-v7.2.jar" | |
# コマンド送信 ===================================================================================== | |
MC_SEND="screen -p 0 -S ${MC_SCREENNAME} -X eval" | |
# 表示設定 ========================================================================================= | |
RESET=$'\e[0m' | |
BOLD=$'\e[1m' | |
RED=$'\e[1;31m' | |
GREEN=$'\e[1;32m' | |
# ユーザ別実行 ##################################################################################### | |
ME=`whoami` | |
as_user() { | |
if [ ${ME} == ${MC_USER} ] ; then | |
bash -c "$1" | |
else | |
su - ${MC_USER} -c "$1" | |
fi | |
} | |
# メッセージ出力 ################################################################################### | |
as_message() { | |
echo "minecraft: ${MC_SERVICE_NAME}: [${2}${1}${RESET}]" | |
} | |
# ファイルダウンロード ############################################################################# | |
download() { | |
as_message "${2}をダウンロードしています..." "${BOLD}" | |
as_user "wget -q -O ${MC_PATH_TMP}/${2} ${1}" | |
if [ -f ${MC_PATH_TMP}/${2} ]; then | |
as_message "${2}のダウンロードを完了しました" "${GREEN}" | |
if [ $# -eq 3 ]; then | |
# 第3引数が指定されている場合は更新チェック | |
if [ -f ${3} ]; then | |
if `diff ${MC_PATH_TMP}/${2} ${3} >/dev/null`; then | |
as_message "${2}は最新版です" "${GREEN}" | |
return 0 | |
else | |
as_message "${2}は更新されています" "${RED}" | |
return 1 | |
fi | |
else | |
as_message "${2}は更新されています" "${RED}" | |
return 1 | |
fi | |
fi | |
return 1 | |
else | |
as_message "${2}のダウンロードに失敗しました" "${RED}" | |
return 0 | |
fi | |
} | |
# 起動処理 ######################################################################################### | |
mc_start() { | |
if ps ax | grep -v grep | grep -v -i SCREEN | grep ${MC_SERVICE} > /dev/null | |
then | |
as_message "既に起動しています" "${GREEN}" | |
else | |
as_message "起動処理中です" "${BOLD}" | |
cd ${MC_PATH_DATA} | |
as_user "cd ${MC_PATH_DATA} && screen -AmdS ${MC_SCREENNAME} ${MC_INVOCATION}" | |
sleep 7 | |
if ps ax | grep -v grep | grep -v -i SCREEN | grep ${MC_SERVICE} > /dev/null | |
then | |
as_message "起動に成功しました" "${GREEN}" | |
else | |
as_message "起動に失敗しました" "${RED}" | |
fi | |
fi | |
} | |
# 停止処理 ######################################################################################### | |
mc_stop() { | |
if ps ax | grep -v grep | grep -v -i SCREEN | grep ${MC_SERVICE} > /dev/null | |
then | |
as_message "停止処理中です" "${BOLD}" | |
as_user "${MC_SEND} 'stuff \"say SERVER SHUTTING DOWN IN ${MC_STOP_INTERVAL} SECONDS.\"\015'" | |
i=${MC_STOP_INTERVAL} | |
while [ ${i} -ne 0 ] | |
do | |
if test `expr ${i} % 30` -eq 0 -o ${i} -le 10 | |
then | |
as_user "${MC_SEND} 'stuff \"say SERVER WILL STOP IN ${i} SECONDS.\"\015'" | |
fi | |
i=`expr ${i} - 1` | |
sleep 1 | |
done | |
as_user "${MC_SEND} 'stuff \"say saving map...\"\015'" | |
as_user "${MC_SEND} 'stuff \"save-all\"\015'" | |
as_user "${MC_SEND} 'stuff \"stop\"\015'" | |
sleep 7 | |
if ps ax | grep -v grep | grep -v -i SCREEN | grep ${MC_SERVICE} > /dev/null | |
then | |
as_message "停止に失敗しました" "${RED}" | |
else | |
as_message "停止に成功しました" "${GREEN}" | |
fi | |
else | |
as_message "既に停止しています" "${RED}" | |
fi | |
} | |
# 高速停止処理 ##################################################################################### | |
mc_rapidstop() { | |
if ps ax | grep -v grep | grep -v -i SCREEN | grep ${MC_SERVICE} > /dev/null | |
then | |
as_message "停止処理中です" "${BOLD}" | |
as_user "${MC_SEND} 'stuff \"save-all\"\015'" | |
as_user "${MC_SEND} 'stuff \"stop\"\015'" | |
sleep 7 | |
if ps ax | grep -v grep | grep -v -i SCREEN | grep ${MC_SERVICE} > /dev/null | |
then | |
as_message "停止に失敗しました" "${RED}" | |
else | |
as_message "停止に成功しました" "${GREEN}" | |
fi | |
else | |
echo "${MC_SERVICE_NAME}: [${RED}停止中${RESET}]" | |
fi | |
} | |
# リロード処理 ##################################################################################### | |
mc_reload() { | |
if ps ax | grep -v grep | grep -v -i SCREEN | grep ${MC_SERVICE} > /dev/null | |
then | |
as_message "再読み込み処理中です" "${BOLD}" | |
as_user "${MC_SEND} 'stuff \"reload\"\015'" | |
sleep 7 | |
as_message "再読み込みに成功しました" "${GREEN}" | |
else | |
as_message "再読み込みに失敗しました" "${RED}" | |
fi | |
} | |
# ステータスチェック処理 ########################################################################### | |
mc_status() { | |
if ps ax | grep -v grep | grep -v -i SCREEN | grep ${MC_SERVICE} > /dev/null | |
then | |
as_message "起動中です" "${GREEN}" | |
else | |
as_message "停止中です" "${RED}" | |
fi | |
} | |
# バックアップ処理 ################################################################################# | |
mc_backup_world() { | |
ARCFILE=${MC_PATH_DATA_BACKUP}/${MC_BACKUP_PREF_WORLD}${MC_BACKUP_FILE}.tgz | |
TRGFILE=${MC_BACKUP_NAME_WORLD} | |
as_message "${MC_BACKUP_NAME_WORLD} バックアップ処理中です" "${BOLD}" | |
as_user "cd ${MC_PATH_DATA} && tar -czf ${ARCFILE} ${TRGFILE}" | |
ARCFILE=${MC_PATH_DATA_BACKUP}/${MC_BACKUP_PREF_NETHER}${MC_BACKUP_FILE}.tgz | |
TRGFILE=${MC_BACKUP_NAME_NETHER} | |
as_message "${MC_BACKUP_NAME_NETHER} バックアップ処理中です" "${BOLD}" | |
as_user "cd ${MC_PATH_DATA} && tar -czf ${ARCFILE} ${TRGFILE}" | |
as_message "バックアップが完了しました" "${GREEN}" | |
} | |
mc_backup_server() { | |
ARCFILE=${MC_PATH_SERVER_BACKUP}/${MC_BACKUP_PREF_SERVER}${MC_BACKUP_FILE}.tgz | |
TRGFILE=${MC_SERVICE} | |
as_message "${MC_SERVICE} バックアップ処理中です" "${BOLD}" | |
as_user "cd ${MC_PATH_SERVER} && tar -czf ${ARCFILE} ${TRGFILE}" | |
as_message "バックアップが完了しました" "${GREEN}" | |
} | |
# サーバプログラムアップデート ##################################################################### | |
mc_update() { | |
if ps ax | grep -v grep | grep -v -i SCREEN | grep ${MC_SERVICE} > /dev/null; then | |
as_message "サーバが起動中なのでアップデートできません" "${RED}" | |
else | |
mc_backup_server | |
as_message "サーバアップデート処理中です" "${BOLD}" | |
download "${MC_DOWNLOAD_URI}" "${MC_DOWNLOAD_FILE}" "${MC_PATH_TMP_UPDATE}/${MC_DOWNLOAD_FILE}" | |
if [ $? -eq 1 ]; then | |
as_user "cp ${MC_PATH_TMP}/${MC_DOWNLOAD_FILE} ${MC_PATH_TMP_UPDATE}/${MC_DOWNLOAD_FILE}" | |
# 日本語mod patch | |
as_message "日本語mod導入処理中です" "${BOLD}" | |
download "${MC_DOWNLOAD_JP_URI}" "${MC_DOWNLOAD_JP_FILE}" | |
as_user "mkdir ${MC_PATH_TMP_PATCH}" | |
as_user "unzip -q -o -d ${MC_PATH_TMP_PATCH} ${MC_PATH_TMP}/${MC_DOWNLOAD_JP_FILE}" | |
as_user "rm -f ${MC_PATH_TMP}/${MC_DOWNLOAD_JP_FILE}" | |
as_user "jar cMf ${MC_PATH_TMP}/${MC_DOWNLOAD_FILE} ${MC_PATH_TMP_PATCH}/*" | |
as_user "rm -rf ${MC_PATH_TMP_PATCH}" | |
as_message "日本語mod導入を完了しました" "${GREEN}" | |
as_user "mv --force ${MC_PATH_TMP}/${MC_DOWNLOAD_FILE} ${MC_PATH_SERVER}/${MC_DOWNLOAD_FILE}" | |
as_user "ln -sf ${MC_PATH_SERVER}/${MC_DOWNLOAD_FILE} ${MC_PATH_SERVER}/${MC_SERVICE}" | |
as_message "${MC_SERVICE_NAME}のアップデートに成功しました" "${GREEN}" | |
fi | |
fi | |
} | |
# プラグインアップデート ########################################################################### | |
mc_plugin_update() { | |
# Permissions | |
MC_T_URL="http://www.theyeticave.net/downloads/permissions/latest/Permissions.jar" | |
MC_T_FIL="Permissions.jar" | |
download "${MC_T_URL}" "${MC_T_FIL}" | |
as_user "mv --force ${MC_PATH_TMP}/${MC_T_FIL} ${MC_PATH_PLUGIN}/${MC_T_FIL}" | |
# MyHome | |
MC_T_URL="http://www.playminecraft.net/MyHome/MyHome.jar" | |
MC_T_FIL="MyHome.jar" | |
download "${MC_T_URL}" "${MC_T_FIL}" | |
as_user "mv --force ${MC_PATH_TMP}/${MC_T_FIL} ${MC_PATH_PLUGIN}/${MC_T_FIL}" | |
# MyWarp | |
MC_T_URL="http://procrafter.de/downloads/MyWarp.jar" | |
MC_T_FIL="MyWarp.jar" | |
download "${MC_T_URL}" "${MC_T_FIL}" | |
as_user "mv --force ${MC_PATH_TMP}/${MC_T_FIL} ${MC_PATH_PLUGIN}/${MC_T_FIL}" | |
# LWC | |
MC_T_URL="http://griefcraft.com/bukkit/lwc/release/LWC.jar" | |
MC_T_FIL="LWC.jar" | |
download "${MC_T_URL}" "${MC_T_FIL}" | |
as_user "mv --force ${MC_PATH_TMP}/${MC_T_FIL} ${MC_PATH_PLUGIN}/${MC_T_FIL}" | |
# Transporter | |
MC_T_URL="${MC_PLUG_TRANSPORTER_URL}" | |
MC_T_FIL="Transporter.jar" | |
download "${MC_T_URL}" "${MC_T_FIL}" | |
as_user "mv --force ${MC_PATH_TMP}/${MC_T_FIL} ${MC_PATH_PLUGIN}/${MC_T_FIL}" | |
# dynmap | |
MC_T_URL="http://webbukkit.org/jenkins/public/dynmap/dynmap-recommended-bin.zip" | |
MC_T_FIL="dynmap-recommended-bin.zip" | |
download "${MC_T_URL}" "${MC_T_FIL}" | |
as_user "mkdir ${MC_PATH_TMP_PATCH}" | |
as_user "unzip -q -o -d ${MC_PATH_TMP_PATCH} ${MC_PATH_TMP}/${MC_T_FIL}" | |
as_user "cp -rf ${MC_PATH_TMP_PATCH}/* ${MC_PATH_PLUGIN}/" | |
as_user "rm -rf ${MC_PATH_TMP_PATCH}" | |
} | |
# 処理分岐 ######################################################################################### | |
case "$1" in | |
start) | |
mc_start | |
;; | |
stop) | |
mc_stop | |
;; | |
reload) | |
mc_reload | |
;; | |
rapidstop) | |
mc_rapidstop | |
;; | |
restart) | |
as_user "${MC_SEND} 'stuff \"say SERVER WILL RESTART! PLEASE LOGOUT!\"\015'" | |
mc_stop | |
mc_start | |
;; | |
rapidrestart) | |
mc_rapidstop | |
mc_start | |
;; | |
backup) | |
mc_backup_world | |
;; | |
server-backup) | |
mc_backup_server | |
;; | |
status) | |
mc_status | |
;; | |
update) | |
mc_update | |
;; | |
plugin-update) | |
mc_plugin_update | |
;; | |
restart-update) | |
as_user "${MC_SEND} 'stuff \"say SERVER WILL UPDATE! PLEASE LOGOUT!\"\015'" | |
mc_stop | |
mc_update | |
mc_start | |
;; | |
*) | |
echo "使い方: minecraft {start|stop|reload|rapidstop|restart|backup|server-backup|status|update|plugin-update|restart-update}" | |
esac | |
exit 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
すばらしい!ぜひ使わせていただきます!