220 lines
8.4 KiB
Bash
220 lines
8.4 KiB
Bash
#!/bin/bash
|
||||
|
|
|
|||
|
|
###############################################################################
|
|||
|
|
# Lotto 6aus49 - Automatische Tipp-Generierung Setup
|
|||
|
|
#
|
|||
|
|
# Richtet Cron-Jobs ein für automatische wöchentliche Tipp-Generierung
|
|||
|
|
#
|
|||
|
|
# Zeitplan:
|
|||
|
|
# - Dienstag 09:00 (vor Mittwoch-Ziehung)
|
|||
|
|
# - Freitag 09:00 (vor Samstag-Ziehung)
|
|||
|
|
#
|
|||
|
|
# Verwendung:
|
|||
|
|
# chmod +x setup_cron.sh
|
|||
|
|
# ./setup_cron.sh
|
|||
|
|
###############################################################################
|
|||
|
|
|
|||
|
|
set -e
|
|||
|
|
|
|||
|
|
# Farben für Output
|
|||
|
|
RED='\033[0;31m'
|
|||
|
|
GREEN='\033[0;32m'
|
|||
|
|
YELLOW='\033[1;33m'
|
|||
|
|
BLUE='\033[0;34m'
|
|||
|
|
NC='\033[0m' # No Color
|
|||
|
|
|
|||
|
|
echo -e "${BLUE}╔═══════════════════════════════════════════════════════════╗${NC}"
|
|||
|
|
echo -e "${BLUE}║ LOTTO 6AUS49 - AUTOMATISIERUNG SETUP ║${NC}"
|
|||
|
|
echo -e "${BLUE}╚═══════════════════════════════════════════════════════════╝${NC}"
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# Project Directory
|
|||
|
|
PROJECT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|||
|
|
SCRIPT_PATH="${PROJECT_DIR}/scripts/automation/weekly_tip_generator.py"
|
|||
|
|
LOG_DIR="${PROJECT_DIR}/logs"
|
|||
|
|
LOG_FILE="${LOG_DIR}/weekly_tips.log"
|
|||
|
|
|
|||
|
|
echo -e "${YELLOW}📁 Project Directory:${NC} ${PROJECT_DIR}"
|
|||
|
|
echo -e "${YELLOW}🐍 Script Path:${NC} ${SCRIPT_PATH}"
|
|||
|
|
echo -e "${YELLOW}📝 Log File:${NC} ${LOG_FILE}"
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# Check if script exists
|
|||
|
|
if [ ! -f "${SCRIPT_PATH}" ]; then
|
|||
|
|
echo -e "${RED}❌ Fehler: Script nicht gefunden: ${SCRIPT_PATH}${NC}"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# Create logs directory
|
|||
|
|
mkdir -p "${LOG_DIR}"
|
|||
|
|
echo -e "${GREEN}✅ Logs-Verzeichnis erstellt/überprüft${NC}"
|
|||
|
|
|
|||
|
|
# Check Python
|
|||
|
|
PYTHON_CMD="python3"
|
|||
|
|
if ! command -v ${PYTHON_CMD} &> /dev/null; then
|
|||
|
|
echo -e "${RED}❌ Python3 nicht gefunden${NC}"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
PYTHON_VERSION=$(${PYTHON_CMD} --version 2>&1 | awk '{print $2}')
|
|||
|
|
echo -e "${GREEN}✅ Python gefunden: ${PYTHON_VERSION}${NC}"
|
|||
|
|
|
|||
|
|
# Check required Python packages
|
|||
|
|
echo ""
|
|||
|
|
echo -e "${BLUE}🔍 Überprüfe Python-Pakete...${NC}"
|
|||
|
|
|
|||
|
|
REQUIRED_PACKAGES=("pandas" "numpy" "sklearn" "requests")
|
|||
|
|
MISSING_PACKAGES=()
|
|||
|
|
|
|||
|
|
for package in "${REQUIRED_PACKAGES[@]}"; do
|
|||
|
|
if ${PYTHON_CMD} -c "import ${package}" 2>/dev/null; then
|
|||
|
|
echo -e "${GREEN} ✅ ${package}${NC}"
|
|||
|
|
else
|
|||
|
|
echo -e "${RED} ❌ ${package} fehlt${NC}"
|
|||
|
|
MISSING_PACKAGES+=("${package}")
|
|||
|
|
fi
|
|||
|
|
done
|
|||
|
|
|
|||
|
|
if [ ${#MISSING_PACKAGES[@]} -gt 0 ]; then
|
|||
|
|
echo ""
|
|||
|
|
echo -e "${YELLOW}⚠️ Fehlende Pakete gefunden. Installation mit:${NC}"
|
|||
|
|
echo -e "${YELLOW} pip install ${MISSING_PACKAGES[*]}${NC}"
|
|||
|
|
echo ""
|
|||
|
|
read -p "Jetzt installieren? (j/n): " -n 1 -r
|
|||
|
|
echo
|
|||
|
|
if [[ $REPLY =~ ^[JjYy]$ ]]; then
|
|||
|
|
pip install "${MISSING_PACKAGES[@]}"
|
|||
|
|
echo -e "${GREEN}✅ Pakete installiert${NC}"
|
|||
|
|
else
|
|||
|
|
echo -e "${RED}❌ Installation abgebrochen${NC}"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# Test script
|
|||
|
|
echo ""
|
|||
|
|
echo -e "${BLUE}🧪 Teste Script...${NC}"
|
|||
|
|
if ${PYTHON_CMD} "${SCRIPT_PATH}" --history > /dev/null 2>&1; then
|
|||
|
|
echo -e "${GREEN}✅ Script funktioniert${NC}"
|
|||
|
|
else
|
|||
|
|
echo -e "${RED}❌ Script-Test fehlgeschlagen${NC}"
|
|||
|
|
echo -e "${YELLOW}Führe manuell aus: ${PYTHON_CMD} ${SCRIPT_PATH} --history${NC}"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# Test notifications
|
|||
|
|
echo ""
|
|||
|
|
echo -e "${BLUE}📲 Teste Benachrichtigungs-System...${NC}"
|
|||
|
|
NOTIFIER_PATH="${PROJECT_DIR}/scripts/utils/notifier.py"
|
|||
|
|
|
|||
|
|
if [ -f "${NOTIFIER_PATH}" ]; then
|
|||
|
|
if ${PYTHON_CMD} "${NOTIFIER_PATH}" --test 2>&1 | grep -q "erfolgreich"; then
|
|||
|
|
echo -e "${GREEN}✅ Benachrichtigungen funktionieren${NC}"
|
|||
|
|
else
|
|||
|
|
echo -e "${YELLOW}⚠️ Benachrichtigungen nicht konfiguriert${NC}"
|
|||
|
|
echo -e "${YELLOW} Konfiguriere config/notifications.json${NC}"
|
|||
|
|
fi
|
|||
|
|
else
|
|||
|
|
echo -e "${YELLOW}⚠️ Notifier nicht gefunden${NC}"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# Generate cron entries
|
|||
|
|
echo ""
|
|||
|
|
echo -e "${BLUE}⚙️ Erstelle Cron-Job Einträge...${NC}"
|
|||
|
|
|
|||
|
|
# Virtuelles Environment
|
|||
|
|
VENV_PYTHON="${PROJECT_DIR}/../Eurojackpot/venv/bin/python3"
|
|||
|
|
if [ ! -f "${VENV_PYTHON}" ]; then
|
|||
|
|
VENV_PYTHON="${PYTHON_CMD}"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
UPDATE_SCRIPT="${PROJECT_DIR}/scripts/automation/auto_update_and_learn.py"
|
|||
|
|
UPDATE_LOG="${LOG_DIR}/auto_update.log"
|
|||
|
|
|
|||
|
|
CRON_ENTRIES="# ========== LOTTO 6AUS49 AUTOMATION ==========
|
|||
|
|
# Tipp-Generierung: Dienstag & Freitag um 09:00 (vor Ziehungen Mi & Sa)
|
|||
|
|
0 9 * * 2,5 cd ${PROJECT_DIR} && ${VENV_PYTHON} ${SCRIPT_PATH} >> ${LOG_FILE} 2>&1
|
|||
|
|
# Auto-Update & Learning: Mittwoch & Sonntag um 21:00 (nach Ziehungen)
|
|||
|
|
0 21 * * 3,0 cd ${PROJECT_DIR} && ${VENV_PYTHON} ${UPDATE_SCRIPT} >> ${UPDATE_LOG} 2>&1"
|
|||
|
|
|
|||
|
|
echo ""
|
|||
|
|
echo -e "${YELLOW}Cron-Job Einträge:${NC}"
|
|||
|
|
echo "─────────────────────────────────────────────────────────"
|
|||
|
|
echo "${CRON_ENTRIES}"
|
|||
|
|
echo "─────────────────────────────────────────────────────────"
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# Ask to install
|
|||
|
|
read -p "Cron-Job jetzt installieren? (j/n): " -n 1 -r
|
|||
|
|
echo
|
|||
|
|
|
|||
|
|
if [[ $REPLY =~ ^[JjYy]$ ]]; then
|
|||
|
|
# Backup current crontab
|
|||
|
|
CRON_BACKUP="${PROJECT_DIR}/logs/crontab_backup_$(date +%Y%m%d_%H%M%S).txt"
|
|||
|
|
crontab -l > "${CRON_BACKUP}" 2>/dev/null || true
|
|||
|
|
echo -e "${GREEN}✅ Backup erstellt: ${CRON_BACKUP}${NC}"
|
|||
|
|
|
|||
|
|
# Check if entry already exists
|
|||
|
|
if crontab -l 2>/dev/null | grep -q "LOTTO 6AUS49 AUTOMATION"; then
|
|||
|
|
echo -e "${YELLOW}⚠️ Cron-Jobs existieren bereits${NC}"
|
|||
|
|
read -p "Überschreiben? (j/n): " -n 1 -r
|
|||
|
|
echo
|
|||
|
|
if [[ ! $REPLY =~ ^[JjYy]$ ]]; then
|
|||
|
|
echo -e "${BLUE}ℹ️ Installation abgebrochen${NC}"
|
|||
|
|
exit 0
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# Remove old entries
|
|||
|
|
crontab -l 2>/dev/null | grep -v "LOTTO 6AUS49" | grep -v "weekly_tip_generator.py" | grep -v "auto_update_and_learn.py" | crontab -
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# Add new entries
|
|||
|
|
(crontab -l 2>/dev/null; echo "${CRON_ENTRIES}") | crontab -
|
|||
|
|
|
|||
|
|
echo -e "${GREEN}✅ Cron-Jobs erfolgreich installiert!${NC}"
|
|||
|
|
echo ""
|
|||
|
|
echo -e "${BLUE}📅 Zeitplan:${NC}"
|
|||
|
|
echo " • Dienstag 09:00 - Tipps generieren (vor Mi-Ziehung)"
|
|||
|
|
echo " • Mittwoch 21:00 - Auto-Update & Learning (nach Mi-Ziehung)"
|
|||
|
|
echo " • Freitag 09:00 - Tipps generieren (vor Sa-Ziehung)"
|
|||
|
|
echo " • Sonntag 21:00 - Auto-Update & Learning (nach Sa-Ziehung)"
|
|||
|
|
echo ""
|
|||
|
|
echo -e "${BLUE}📝 Logs:${NC}"
|
|||
|
|
echo " • Tipps: ${LOG_FILE}"
|
|||
|
|
echo " • Updates: ${UPDATE_LOG}"
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# Show current crontab
|
|||
|
|
echo -e "${BLUE}🕐 Aktuelle Cron-Jobs:${NC}"
|
|||
|
|
echo "─────────────────────────────────────────────────────────"
|
|||
|
|
crontab -l | grep -v "^#" | grep -v "^$" || echo "Keine anderen Cron-Jobs"
|
|||
|
|
echo "─────────────────────────────────────────────────────────"
|
|||
|
|
|
|||
|
|
else
|
|||
|
|
echo -e "${BLUE}ℹ️ Installation abgebrochen${NC}"
|
|||
|
|
echo ""
|
|||
|
|
echo -e "${YELLOW}Manuell installieren mit:${NC}"
|
|||
|
|
echo " crontab -e"
|
|||
|
|
echo ""
|
|||
|
|
echo "Und folgende Einträge hinzufügen:"
|
|||
|
|
echo "${CRON_ENTRIES}"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
echo ""
|
|||
|
|
echo -e "${GREEN}╔═══════════════════════════════════════════════════════════╗${NC}"
|
|||
|
|
echo -e "${GREEN}║ SETUP ABGESCHLOSSEN ║${NC}"
|
|||
|
|
echo -e "${GREEN}╚═══════════════════════════════════════════════════════════╝${NC}"
|
|||
|
|
echo ""
|
|||
|
|
echo -e "${BLUE}Nützliche Befehle:${NC}"
|
|||
|
|
echo " • Cron-Jobs anzeigen: crontab -l"
|
|||
|
|
echo " • Cron-Jobs entfernen: crontab -e (dann Zeilen löschen)"
|
|||
|
|
echo " • Tipp-Logs anzeigen: tail -f ${LOG_FILE}"
|
|||
|
|
echo " • Update-Logs anzeigen: tail -f ${UPDATE_LOG}"
|
|||
|
|
echo " • Tipps manuell generieren: ${VENV_PYTHON} ${SCRIPT_PATH} --force"
|
|||
|
|
echo " • Update manuell starten: ${VENV_PYTHON} ${UPDATE_SCRIPT}"
|
|||
|
|
echo " • Historie anzeigen: ${VENV_PYTHON} ${SCRIPT_PATH} --history"
|
|||
|
|
echo " • Test-Notification: ${VENV_PYTHON} ${NOTIFIER_PATH} --test"
|
|||
|
|
echo ""
|
|||
|
|
echo -e "${YELLOW}🍀 Viel Glück bei der nächsten Ziehung! 🍀${NC}"
|
|||
|
|
echo ""
|