Enhance restart-scheduled.sh script with support for multiple RCON clients and improved installation instructions. Set default RCON timeout and adjust PATH for cron compatibility.
This commit is contained in:
@@ -5,9 +5,18 @@
|
|||||||
#
|
#
|
||||||
# Требования:
|
# Требования:
|
||||||
# - В server.properties: enable-rcon=true, rcon.password=..., rcon.port=...
|
# - В server.properties: enable-rcon=true, rcon.password=..., rcon.port=...
|
||||||
# - Утилита mcrcon в PATH (см. README.md в этом каталоге)
|
# - RCON-клиент в PATH: сначала ищется mcrcon, иначе rcon (github.com/gorcon/rcon-cli)
|
||||||
# - Права на systemctl для сервиса (удобнее всего — crontab root)
|
# - Права на systemctl для сервиса (удобнее всего — crontab root)
|
||||||
#
|
#
|
||||||
|
# Установка mcrcon, если в apt пакета нет (Linux x86_64, статический бинарник):
|
||||||
|
# curl -fsSLO https://github.com/Tiiffi/mcrcon/releases/download/v0.7.2/mcrcon-0.7.2-linux-x86-64-static.zip
|
||||||
|
# unzip -o mcrcon-0.7.2-linux-x86-64-static.zip
|
||||||
|
# sudo install -m755 mcrcon-0.7.2-linux-x86-64-static/mcrcon /usr/local/bin/
|
||||||
|
#
|
||||||
|
# Сборка из исходников:
|
||||||
|
# sudo apt install -y git build-essential
|
||||||
|
# git clone --depth 1 https://github.com/Tiiffi/mcrcon.git && cd mcrcon && make && sudo install -m755 mcrcon /usr/local/bin/
|
||||||
|
#
|
||||||
# Расписание (каждые 6 часов: 00:00, 06:00, 12:00, 18:00):
|
# Расписание (каждые 6 часов: 00:00, 06:00, 12:00, 18:00):
|
||||||
# crontab -e
|
# crontab -e
|
||||||
# 0 */6 * * * /opt/PupaMLupa/Server/restart-scheduled.sh >>/var/log/mc-restart.log 2>&1
|
# 0 */6 * * * /opt/PupaMLupa/Server/restart-scheduled.sh >>/var/log/mc-restart.log 2>&1
|
||||||
@@ -16,8 +25,11 @@
|
|||||||
# MINECRAFT_SERVICE — имя unit (по умолчанию: minecraft)
|
# MINECRAFT_SERVICE — имя unit (по умолчанию: minecraft)
|
||||||
# RCON_HOST — хост RCON (по умолчанию: 127.0.0.1)
|
# RCON_HOST — хост RCON (по умолчанию: 127.0.0.1)
|
||||||
# STOP_WAIT_SEC — макс. ожидание выхода процесса после stop (по умолчанию: 180)
|
# STOP_WAIT_SEC — макс. ожидание выхода процесса после stop (по умолчанию: 180)
|
||||||
|
# RCON_TIMEOUT — таймаут для rcon (gorcon), напр. 60s (по умолчанию: 60s)
|
||||||
|
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
# cron часто даёт урезанный PATH — mcrcon обычно в /usr/bin или /usr/local/bin
|
||||||
|
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:${PATH:-}"
|
||||||
|
|
||||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
cd "${SCRIPT_DIR}"
|
cd "${SCRIPT_DIR}"
|
||||||
@@ -25,6 +37,8 @@ cd "${SCRIPT_DIR}"
|
|||||||
MINECRAFT_SERVICE="${MINECRAFT_SERVICE:-minecraft}"
|
MINECRAFT_SERVICE="${MINECRAFT_SERVICE:-minecraft}"
|
||||||
RCON_HOST="${RCON_HOST:-127.0.0.1}"
|
RCON_HOST="${RCON_HOST:-127.0.0.1}"
|
||||||
STOP_WAIT_SEC="${STOP_WAIT_SEC:-180}"
|
STOP_WAIT_SEC="${STOP_WAIT_SEC:-180}"
|
||||||
|
RCON_TIMEOUT="${RCON_TIMEOUT:-60s}"
|
||||||
|
RCON_CLIENT=""
|
||||||
|
|
||||||
LOCK_FILE="${SCRIPT_DIR}/.restart-scheduled.lock"
|
LOCK_FILE="${SCRIPT_DIR}/.restart-scheduled.lock"
|
||||||
PROPS="${SCRIPT_DIR}/server.properties"
|
PROPS="${SCRIPT_DIR}/server.properties"
|
||||||
@@ -57,7 +71,13 @@ systemctl_wrap() {
|
|||||||
|
|
||||||
rcon_exec() {
|
rcon_exec() {
|
||||||
local cmd="$1"
|
local cmd="$1"
|
||||||
mcrcon -H "${RCON_HOST}" -P "${RCON_PORT}" -p "${RCON_PASSWORD}" "${cmd}"
|
if [[ "${RCON_CLIENT}" == "mcrcon" ]]; then
|
||||||
|
mcrcon -H "${RCON_HOST}" -P "${RCON_PORT}" -p "${RCON_PASSWORD}" "${cmd}"
|
||||||
|
else
|
||||||
|
# gorcon/rcon-cli: команда передаётся словами, как в консоли сервера (say …, save-all flush, …)
|
||||||
|
# shellcheck disable=SC2086
|
||||||
|
rcon -a "${RCON_HOST}:${RCON_PORT}" -p "${RCON_PASSWORD}" -T "${RCON_TIMEOUT}" ${cmd}
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
rcon_say() {
|
rcon_say() {
|
||||||
@@ -71,7 +91,14 @@ if ! flock -n 9; then
|
|||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
command -v mcrcon >/dev/null 2>&1 || die "нужна утилита mcrcon (например: apt install mcrcon или сборка с https://github.com/Tiiffi/mcrcon)"
|
if command -v mcrcon >/dev/null 2>&1; then
|
||||||
|
RCON_CLIENT="mcrcon"
|
||||||
|
elif command -v rcon >/dev/null 2>&1; then
|
||||||
|
RCON_CLIENT="rcon"
|
||||||
|
else
|
||||||
|
die "нужен RCON-клиент: mcrcon или rcon (https://github.com/gorcon/rcon-cli/releases). См. комментарии в начале этого скрипта — статический mcrcon для x86_64 или сборка из git."
|
||||||
|
fi
|
||||||
|
log "RCON-клиент: ${RCON_CLIENT}"
|
||||||
|
|
||||||
if ! systemctl_wrap is-active --quiet "${MINECRAFT_SERVICE}"; then
|
if ! systemctl_wrap is-active --quiet "${MINECRAFT_SERVICE}"; then
|
||||||
log "сервис ${MINECRAFT_SERVICE} не active — перезапуск не выполняется."
|
log "сервис ${MINECRAFT_SERVICE} не active — перезапуск не выполняется."
|
||||||
|
|||||||
Reference in New Issue
Block a user