# 🕐 CRON Jobs - Dokumentacja ## Archiwizacja meczów ### Plik: `archive_matches.php` Automatycznie archiwizuje mecze starsze niż 6 miesięcy do tabeli `matches_archive`. ### 📋 Konfiguracja CRON #### Opcja 1: cPanel / Plesk (Rekomendowane) 1. Zaloguj się do cPanel/Plesk 2. Znajdź "Cron Jobs" lub "Zadania zaplanowane" 3. Dodaj nowe zadanie: ``` Częstotliwość: Co tydzień (niedziela) Godzina: 02:00 Komenda: php /home/USERNAME/public_html/private_html/cron/archive_matches.php ``` #### Opcja 2: Crontab (Linux) Edytuj crontab: ```bash crontab -e ``` Dodaj linię (niedziela o 2:00): ``` 0 2 * * 0 /usr/bin/php /path/to/private_html/cron/archive_matches.php ``` Lub codziennie o 2:00: ``` 0 2 * * * /usr/bin/php /path/to/private_html/cron/archive_matches.php ``` #### Opcja 3: Windows Task Scheduler 1. Otwórz "Harmonogram zadań" (Task Scheduler) 2. Utwórz nowe zadanie: - **Wyzwalacz:** Co tydzień, niedziela, 02:00 - **Akcja:** Uruchom program - **Program:** `C:\xampp\php\php.exe` (lub inna ścieżka do PHP) - **Argumenty:** `C:\Users\scans\.vscode\OpenGame\private_html\cron\archive_matches.php` ### 🧪 Testowanie #### Test 1: Manualne uruchomienie (CLI) ```bash php private_html/cron/archive_matches.php ``` #### Test 2: Przez przeglądarkę (tylko z localhost) ``` http://localhost/cron/archive_matches.php ``` **UWAGA:** Działa tylko z localhost ze względów bezpieczeństwa! ### 📊 Logi Logi są zapisywane w pliku: ``` private_html/cron/archive_log.txt ``` Przykład logu: ``` [2026-01-27 02:00:01] === START Archiwizacja meczów === [2026-01-27 02:00:01] Połączono z bazą danych [2026-01-27 02:00:05] Wynik archiwizacji: Zarchiwizowano 1234 meczów starszych niż 2025-07-27 [2026-01-27 02:00:05] Statystyki: [2026-01-27 02:00:05] - Active: 45678 meczów [2026-01-27 02:00:05] - Archived: 123456 meczów [2026-01-27 02:00:05] === END Archiwizacja zakończona pomyślnie === ``` ### 🔒 Bezpieczeństwo - ✅ Skrypt działa tylko z CLI lub localhost - ✅ Timeout 5 minut (długie operacje) - ✅ Logi automatycznie rotowane przy 5MB - ✅ Transakcje SQL (bezpieczne usuwanie) ### ⚙️ Konfiguracja Domyślne ustawienia: - **Wiek archiwizacji:** 6 miesięcy - **Timeout:** 300 sekund (5 minut) - **Rotacja logów:** przy 5MB Aby zmienić wiek archiwizacji, edytuj procedurę w SQL: ```sql -- W pliku database_archivization.sql zmień: SET archive_date = DATE_SUB(NOW(), INTERVAL 6 MONTH); -- Na przykład na 3 miesiące: SET archive_date = DATE_SUB(NOW(), INTERVAL 3 MONTH); ``` ### 🆘 Troubleshooting **Problem:** "Access denied - tylko z CLI lub localhost" **Rozwiązanie:** Uruchom przez terminal lub zmień zabezpieczenie w pliku PHP **Problem:** "SQLSTATE[42000]: Syntax error" **Rozwiązanie:** Upewnij się że procedura `archive_old_matches()` została utworzona: ```sql CALL archive_old_matches(); -- Test w phpMyAdmin ``` **Problem:** Log nie jest tworzony **Rozwiązanie:** Sprawdź uprawnienia zapisu: ```bash chmod 755 private_html/cron/ chmod 644 private_html/cron/archive_log.txt ``` **Problem:** Cron nie uruchamia się **Rozwiązanie:** Sprawdź ścieżkę do PHP: ```bash which php # Linux where php # Windows ``` ### 📧 Powiadomienia email (opcjonalne) Aby otrzymywać email po archiwizacji, dodaj na końcu pliku PHP: ```php // Wyślij email z raportem mail( 'admin@example.com', 'Raport archiwizacji meczów', "Zarchiwizowano X meczów.\n\nStatystyki:\n...", 'From: cron@example.com' ); ``` ### 🎯 Rekomendacje - **Mały projekt (<10k meczów/miesiąc):** Uruchamiaj co miesiąc - **Średni projekt (10k-100k):** Uruchamiaj co tydzień ✅ - **Duży projekt (>100k):** Uruchamiaj codziennie ### 📚 Powiązane pliki - `database_archivization.sql` - Procedury SQL - `archive_matches.php` - Skrypt PHP - `archive_log.txt` - Logi wykonania