Касса самообслуживания
Self-Service Ticket Office
Тестирование железа с записью лога оперативная память/диски/нагрузка
kso_autotest.zip
curl -O https://as-wiki.ru/_media/support/terminals/kso_autotest.zip && unzip -o kso_autotest.zip && chmod +x kso_autotest.sh && ./kso_autotest.sh
kso_autotest.sh
- kso_autotest.sh
#!/bin/bash
# == KSO Auto Test Script с Меню ==
# Автор: takraztak | Дата: 2025-07-18
LOG_DIR="/var/log"
LAST_LOG=""
LAST_ERR=""
find_last_logs() {
LAST_LOG=$(ls -t "$LOG_DIR"/kso_test_*.log 2>/dev/null | head -n1)
LAST_ERR=$(ls -t "$LOG_DIR"/kso_test_*.err.log 2>/dev/null | head -n1)
}
run_tests() {
TIMESTAMP=$(date '+%Y-%m-%d_%H-%M-%S')
LOGFILE="$LOG_DIR/kso_test_$TIMESTAMP.log"
ERRFILE="$LOG_DIR/kso_test_$TIMESTAMP.err.log"
log() {
echo -e "$1" | tee -a "$LOGFILE"
}
log "=== ТЕСТ СИСТЕМЫ КСО ==="
log "⏱ Время запуска: $(date)"
log "\n[1] Включение стандартных репозиториев..."
RETRIES=5
while [ ! -f /etc/apt/sources.list-back ] && [ $RETRIES -gt 0 ]; do
log " ⏳ Ожидание файла /etc/apt/sources.list-back... (осталось попыток: $RETRIES)"
sleep 1
RETRIES=$((RETRIES - 1))
done
if [ -f /etc/apt/sources.list-back ]; then
cp /etc/apt/sources.list-back /etc/apt/sources.list 2>>"$ERRFILE"
log " → Репозитории восстановлены."
else
log " ! Файл /etc/apt/sources.list-back не найден. Прерывание."
echo "Отсутствует sources.list-back" >> "$ERRFILE"
return 1
fi
log "\n[2] Обновление списка пакетов..."
apt update >> "$LOGFILE" 2>>"$ERRFILE" || return 1
log "\n[3] Установка необходимых пакетов..."
apt install -y stress memtester mc wget tar >> "$LOGFILE" 2>>"$ERRFILE" || return 1
log "\n[4] Загрузка и установка HDSentinel..."
cd /tmp || return 1
wget -q https://www.hdsentinel.com/hdslin/hdsentinel_gui64bit.tar.xz
if [ -f hdsentinel_gui64bit.tar.xz ]; then
tar -xf hdsentinel_gui64bit.tar.xz
cd HDSentinel_GUI || return 1
./install.sh >> "$LOGFILE" 2>>"$ERRFILE"
log " → HDSentinel установлен."
else
log " ! Не удалось загрузить HDSentinel."
echo "Ошибка: HDSentinel не загружен" >> "$ERRFILE"
return 1
fi
log "\n[5] Отключение репозиториев..."
rm -f /etc/apt/sources.list 2>>"$ERRFILE"
log " → sources.list удалён."
log "\n=== ЗАПУСК ТЕСТОВ ==="
log "\n[✓] Проверка SSD через HDSentinel:"
/usr/share/bin/HDSentinel | tee -a "$LOGFILE" || echo "Ошибка запуска HDSentinel" >> "$ERRFILE"
MEM_TOTAL_KB=$(grep MemTotal /proc/meminfo | awk '{print $2}')
MEM_FREE_KB=$(grep MemAvailable /proc/meminfo | awk '{print $2}')
MEM_TEST_MB=$((MEM_FREE_KB / 1024 - 200))
if (( MEM_TEST_MB < 512 )); then
log "\n[✗] Недостаточно памяти для memtester: всего ${MEM_TEST_MB} MB"
else
log "\n[✓] Тест памяти через memtester (~${MEM_TEST_MB} MB):"
memtester "${MEM_TEST_MB}M" 1 | tee -a "$LOGFILE" 2>>"$ERRFILE"
fi
log "\n[✓] Тест стабильности под нагрузкой (stress 10 минут)..."
stress -c 4 -m 5 -i 10 -t 600 >> "$LOGFILE" 2>>"$ERRFILE"
log " → stress завершён."
log "\n=== ТЕСТ ЗАВЕРШЁН ==="
log "📁 Лог: $LOGFILE"
log "⚠️ Ошибки (если были): $ERRFILE"
log "⏱ Завершено: $(date)"
}
menu() {
while true; do
find_last_logs
echo -e "\n╔══════════════════════════════════════════════╗"
echo "║ KSO АВТОТЕСТ: МЕНЮ ДЕЙСТВИЙ ║"
echo "╠══════════════════════════════════════════════╣"
echo "║ 1 - Запустить полный тест ║"
echo "║ 2 - Показать последний лог ║"
echo "║ 3 - Показать ошибки из последнего лога ║"
echo "║ 0 - Выход ║"
echo "╠══════════════════════════════════════════════╣"
echo "║ 🔍 Навигация по логам (less): ║"
echo "║ q - выйти / - поиск n - далее ║"
echo "║ G - конец g - начало ↑/↓ - прокрутка ║"
echo "╚══════════════════════════════════════════════╝"
read -rp "Выбор: " choice
case "$choice" in
1)
run_tests
;;
2)
if [ -n "$LAST_LOG" ]; then
less "$LAST_LOG"
else
echo "❌ Лог не найден"
fi
;;
3)
if [ -n "$LAST_ERR" ]; then
less "$LAST_ERR"
else
echo "❌ Лог ошибок не найден"
fi
;;
0)
break
;;
*)
echo "Неверный выбор."
;;
esac
done
}
menu
Сделать исполняемым
chmod +x kso_autotest.sh
Запустить
sudo ./kso_autotest.sh