togethere.cloud/public_html/cron/README.md

150 lines
3.9 KiB
Markdown

# 🕐 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