Refine restart-scheduled.sh script to prioritize environment variables for RCON configuration, enhancing flexibility for cron usage. Update documentation for clarity on RCON settings and usage examples.

This commit is contained in:
Leonid Pershin
2026-05-09 22:18:16 +03:00
parent e92654e840
commit 6401472a42
+16 -4
View File
@@ -5,6 +5,9 @@
#
# Требования:
# - В server.properties: enable-rcon=true, rcon.password=..., rcon.port=...
# Пароль и порт должны совпадать с тем, что слушает сервер Minecraft.
# Либо задайте только в server.properties, либо переопределите через
# переменные окружения RCON_PASSWORD и RCON_PORT (см. ниже).
# - RCON-клиент в PATH: сначала ищется mcrcon, иначе rcon (github.com/gorcon/rcon-cli)
# - Права на systemctl для сервиса (удобнее всего — crontab root)
#
@@ -24,8 +27,14 @@
# Переменные окружения (необязательно):
# MINECRAFT_SERVICE — имя unit (по умолчанию: minecraft)
# RCON_HOST — хост RCON (по умолчанию: 127.0.0.1)
# RCON_PORT — порт RCON; если не задан — из server.properties (rcon.port)
# RCON_PASSWORD — пароль RCON; если не задан — из server.properties (rcon.password)
# STOP_WAIT_SEC — макс. ожидание выхода процесса после stop (по умолчанию: 180)
# RCON_TIMEOUT — таймаут для rcon (gorcon), напр. 60s (по умолчанию: 60s)
#
# Пример в crontab (пароль только в окружении cron, не в скрипте):
# 0 */6 * * * RCON_PASSWORD='ваш_секрет' /opt/PupaMLupa/Server/restart-scheduled.sh >>/var/log/mc-restart.log 2>&1
# (в server.properties тот же пароль в rcon.password=..., иначе сервер не примет RCON)
set -euo pipefail
# cron часто даёт урезанный PATH — mcrcon обычно в /usr/bin или /usr/local/bin
@@ -108,10 +117,13 @@ fi
rc_en="$(read_prop enable-rcon)"
[[ "${rc_en,,}" == "true" ]] || die "в server.properties включите enable-rcon=true"
RCON_PORT="$(read_prop rcon.port)"
RCON_PASSWORD="$(read_prop rcon.password)"
[[ -n "${RCON_PORT}" ]] || die "не задан rcon.port"
[[ -n "${RCON_PASSWORD}" ]] || die "не задан rcon.password"
_prop_port="$(read_prop rcon.port)"
_prop_pass="$(read_prop rcon.password)"
# Переменные окружения имеют приоритет (удобно для cron).
RCON_PORT="${RCON_PORT:-${_prop_port}}"
RCON_PASSWORD="${RCON_PASSWORD:-${_prop_pass}}"
[[ -n "${RCON_PORT}" ]] || die "не задан rcon.port (server.properties или переменная RCON_PORT)"
[[ -n "${RCON_PASSWORD}" ]] || die "не задан rcon.password (server.properties или переменная RCON_PASSWORD)"
# Проверка RCON
rcon_exec "list" >/dev/null || die "RCON не отвечает (хост ${RCON_HOST}, порт ${RCON_PORT})"