From 8a1104ae0763b94822ee5ad57ba048e6a69e617a Mon Sep 17 00:00:00 2001 From: vchikalkin Date: Tue, 17 Mar 2026 15:27:46 +0300 Subject: [PATCH] add scripts --- scripts/update-files.sh | 91 ++++++++++++++++++++++++++++++++++++++++ scripts/update-script.sh | 50 ++++++++++++++++++++++ 2 files changed, 141 insertions(+) create mode 100644 scripts/update-files.sh create mode 100644 scripts/update-script.sh diff --git a/scripts/update-files.sh b/scripts/update-files.sh new file mode 100644 index 0000000..e11de7e --- /dev/null +++ b/scripts/update-files.sh @@ -0,0 +1,91 @@ +#!/bin/sh + +# ====== КОНФИГУРАЦИЯ ====== + +# Формат: "URL|ЛОКАЛЬНЫЙ_ПУТЬ" +# Добавляйте сколько угодно пар +FILES=" +https://gitea.vchikalkin.dev/admin/keenetic-configs/raw/branch/master/opt/etc/nfqws/user.list|/opt/etc/nfqws/user.list +" + +RESTART_CMD="/opt/etc/init.d/rc.unslung restart" +LOG="/opt/var/log/update_files.log" +TMP_DIR="/opt/tmp" + +# ====== ЛОГИКА ====== + +mkdir -p "$TMP_DIR" +CHANGED=0 +TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S') + +for entry in $FILES; do + # Пропускаем пустые строки + [ -z "$entry" ] && continue + + URL=$(echo "$entry" | cut -d'|' -f1) + LOCAL=$(echo "$entry" | cut -d'|' -f2) + + [ -z "$URL" ] || [ -z "$LOCAL" ] && continue + + TMP_FILE="$TMP_DIR/update_$(echo "$LOCAL" | md5sum | cut -d' ' -f1).tmp" + + # Скачиваем + wget -q -O "$TMP_FILE" "$URL" 2>/dev/null + + if [ $? -ne 0 ]; then + echo "$TIMESTAMP [ERROR] Не удалось скачать: $URL" >> "$LOG" + rm -f "$TMP_FILE" + continue + fi + + # Проверяем что файл не пустой + if [ ! -s "$TMP_FILE" ]; then + echo "$TIMESTAMP [WARN] Пустой файл: $URL" >> "$LOG" + rm -f "$TMP_FILE" + continue + fi + + # Сравниваем с текущим + NEED_UPDATE=0 + + if [ ! -f "$LOCAL" ]; then + # Файла ещё нет + NEED_UPDATE=1 + else + # Сравниваем контрольные суммы + OLD_SUM=$(md5sum "$LOCAL" 2>/dev/null | cut -d' ' -f1) + NEW_SUM=$(md5sum "$TMP_FILE" | cut -d' ' -f1) + + if [ "$OLD_SUM" != "$NEW_SUM" ]; then + NEED_UPDATE=1 + fi + fi + + if [ "$NEED_UPDATE" -eq 1 ]; then + # Создаём директорию если нет + mkdir -p "$(dirname "$LOCAL")" + cp "$TMP_FILE" "$LOCAL" + CHANGED=1 + echo "$TIMESTAMP [UPDATED] $LOCAL <- $URL" >> "$LOG" + fi + + rm -f "$TMP_FILE" +done + +# Перезапуск только если что-то изменилось +if [ "$CHANGED" -eq 1 ]; then + echo "$TIMESTAMP [RESTART] Перезапуск Entware..." >> "$LOG" + $RESTART_CMD >> "$LOG" 2>&1 + echo "$TIMESTAMP [RESTART] Готово" >> "$LOG" +else + echo "$TIMESTAMP [OK] Изменений нет" >> "$LOG" +fi + +# Ротация лога (оставляем последние 200 строк) +if [ -f "$LOG" ]; then + LINES=$(wc -l < "$LOG") + if [ "$LINES" -gt 200 ]; then + tail -100 "$LOG" > "$LOG.tmp" + mv "$LOG.tmp" "$LOG" + fi +fi \ No newline at end of file diff --git a/scripts/update-script.sh b/scripts/update-script.sh new file mode 100644 index 0000000..c34bf07 --- /dev/null +++ b/scripts/update-script.sh @@ -0,0 +1,50 @@ +#!/bin/sh + +# URL вашего основного скрипта (залейте на GitHub/свой сервер) +SCRIPT_URL="https://gitea.vchikalkin.dev/admin/keenetic-configs/raw/branch/master/scripts/update-files.sh" +SCRIPT_PATH="/opt/etc/update_files.sh" +TMP_SCRIPT="/opt/tmp/update_files.sh.tmp" +LOG="/opt/var/log/update_files.log" + +# Создаем необходимые директории +mkdir -p /opt/tmp /opt/var/log + +# Проверяем существование лог-файла и создаем его если нужно +touch "$LOG" + +TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S') + +# Скачиваем свежую версию скрипта +wget -q -O "$TMP_SCRIPT" "$SCRIPT_URL" 2>/dev/null + +if [ $? -ne 0 ] || [ ! -s "$TMP_SCRIPT" ]; then + echo "$TIMESTAMP [LAUNCHER] Не удалось скачать скрипт, запускаю локальный" >> "$LOG" + rm -f "$TMP_SCRIPT" +else + # Сравниваем хеши + if [ -f "$SCRIPT_PATH" ]; then + OLD_SUM=$(md5sum "$SCRIPT_PATH" 2>/dev/null | cut -d' ' -f1) + else + OLD_SUM="" + fi + + NEW_SUM=$(md5sum "$TMP_SCRIPT" | cut -d' ' -f1) + + if [ "$OLD_SUM" != "$NEW_SUM" ]; then + # Копируем новый скрипт + cp "$TMP_SCRIPT" "$SCRIPT_PATH" + chmod +x "$SCRIPT_PATH" + echo "$TIMESTAMP [LAUNCHER] Скрипт обновлён" >> "$LOG" + else + echo "$TIMESTAMP [LAUNCHER] Скрипт не изменился" >> "$LOG" + fi + rm -f "$TMP_SCRIPT" +fi + +# Запускаем основной скрипт +if [ -x "$SCRIPT_PATH" ]; then + echo "$TIMESTAMP [LAUNCHER] Запуск основного скрипта" >> "$LOG" + exec "$SCRIPT_PATH" +else + echo "$TIMESTAMP [LAUNCHER] Скрипт не найден!" >> "$LOG" +fi