Роль для настройки сервера майнкрафт под Alpine Linux
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

125 lines
3.8 KiB

#!/sbin/openrc-run
# /etc/init.d/minecraft
#
# Minecraft - OpenRC scripts
# Copyright (C) 2017-2019 João Brázio [joao@brazio.org]
#
# Expects the game folder to be located at /srv/minecraft/<instance>
# Don't use directly the /etc/init.d/minecraft script, create a symlink for you instance.
#
# This is an example for Paper:
# - mkdir -p /srv/minecraft/paper
# - Download paper jar and place it there
# - ln -s /etc/init.d/minecraft /etc/init.d/minecraft.paper
# - cp /etc/conf.d/minecraft /etc/conf.d/minecraft.paper
#
# Dependencies:
# - Java VM at /usr/bin/java
# - mcrcon [https://github.com/Tiiffi/mcrcon]
#
USER={{ server_user }}
GROUP={{ server_user }}
INSTANCE=${RC_SVCNAME##*.}
BASE="/home/{{ server_user }}/minecraft"
PIDFILE="/var/run/${RC_SVCNAME}.pid"
RCON="/usr/bin/rcon"
BIN="$(ls ${BASE} -v 2>/dev/null | grep -i "craftbukkit.*jar\\|spigot.*jar\\|paper*.*jar\\|minecraft_server.*jar" | head -n 1)"
config_get () {
echo $(grep ${1} "${BASE}/server.properties" | cut -d '=' -f 2)
}
depend () {
need net
}
start_pre () {
if [ -z "${BIN}" ]; then
eerror "${RC_SVCNAME} cannot find a proper server jar."
eerror "Check your game installation at ${BASE}."
return 1
fi
[ -f "${PIDFILE}" ] && rm ${PIDFILE}
return 0
}
start () {
ebegin "Starting Minecraft server ${INSTANCE}"
start-stop-daemon --start --chdir ${BASE} --pidfile ${PIDFILE} --make-pidfile \
--exec /usr/bin/java --user ${USER} --group ${GROUP} \
--background -- -server -Xms${MINHEAP:-128M} -Xmx${MAXHEAP:-1024M} \
${CUSTOMARGS} -jar ${BIN} nogui
eend $?
}
stop_pre () {
if [ ! -f "${BASE}/server.properties" ]; then
eerror "${RC_SVCNAME} cannot find a proper server config file."
eerror "Check your game installation at ${BASE}."
return 1
fi
return 0
}
stop () {
ebegin "Stopping Minecraft server ${INSTANCE}"
if [ "$(config_get enable-rcon)" = "true" ]; then
# Fetch rcon configuration
RCON_SRV=$(config_get server.ip)
RCON_PORT=$(config_get rcon.port)
RCON_PASS=$(config_get rcon.password)
# Try to soft kill the server
${RCON} -H ${RCON_SRV:-127.0.0.1} -p ${RCON_PORT} -m -P ${RCON_PASS} save-all 1>/dev/null 2>&1
${RCON} -H ${RCON_SRV:-127.0.0.1} -p ${RCON_PORT} -m -P ${RCON_PASS} stop 1>/dev/null 2>&1
i=0
PID=$(cat ${PIDFILE})
while [ "${i}" -le 30 ]; do
kill -0 ${PID} 2>/dev/null && sleep 1 || break
i=$(( i + 1 ))
done
fi
# Hard stop the server
start-stop-daemon --stop --chdir ${BASE} --pidfile ${PIDFILE} --user ${USER} --group ${GROUP} --retry 5 2>/dev/null
eend 0
}
status () {
if [ "$(config_get enable-rcon)" = "true" ]; then
# Fetch rcon configuration
RCON_SRV=$(config_get server.ip)
RCON_PORT=$(config_get rcon.port)
RCON_PASS=$(config_get rcon.password)
${RCON} -H ${RCON_SRV:-127.0.0.1} -p ${RCON_PORT} -m -P ${RCON_PASS} version
${RCON} -H ${RCON_SRV:-127.0.0.1} -p ${RCON_PORT} -m -P ${RCON_PASS} tps
fi
}
backup() {
saveoff
NOW=`date "+%Y-%m-%d_%Hh%M"`
BACKUP_FILE="${BACKUP_BASE}/backup_${NOW}.tar"
einfo "Backing up minecraft world..."
as_user "tar -C \"${BASE}\" -cf \"$BACKUP_FILE\" ${WORLDS}"
einfo "Backing up ${BIN}"
as_user "tar -C \"${BASE}\" -rf \"$BACKUP_FILE\" ${BIN} server.properties"
saveon
einfo "Compressing backup..."
as_user "gzip -f \"$BACKUP_FILE\""
einfo "Done."
}