# Настройка Cron в FastPanel
## Описание скрипта cron.php
Скрипт `cron.php` выполняет следующие задачи:
1. Подключается к игровым серверам через SFTP/FTP/локально
2. Скачивает демо-файлы (`.dem`), которые старше 180 секунд (3 минуты)
3. Сжимает их в `.gz` формат
4. Удаляет старые файлы (старше 3 дней) с локального хранилища
## Настройка Cron в FastPanel
### Способ 1: Через веб-интерфейс FastPanel
1. Войдите в панель FastPanel
2. Перейдите в раздел **"Cron задачи"** или **"Планировщик задач"**
3. Нажмите **"Добавить задачу"**
4. Заполните форму:
**Название задачи:**
```
Скачивание демо-файлов
```
**Команда:**
```bash
/usr/bin/php -q /home/ваш_пользователь/domains/ваш_домен/public_html/cron.php
```
**Или если используется другой путь к PHP:**
```bash
php -q /home/ваш_пользователь/domains/ваш_домен/public_html/cron.php
```
**Расписание:**
- **Каждые 5 минут:** `*/5 * * * *`
- **Каждые 10 минут:** `*/10 * * * *`
- **Каждые 15 минут:** `*/15 * * * *`
- **Каждую минуту (для тестирования):** `* * * * *`
**Рекомендуется:** `*/5 * * * *` (каждые 5 минут)
### Способ 2: Через SSH (ручное редактирование crontab)
1. Подключитесь к серверу по SSH
2. Выполните команду:
```bash
crontab -e
```
3. Добавьте строку:
```bash
*/5 * * * * /usr/bin/php -q /home/ваш_пользователь/domains/ваш_домен/public_html/cron.php >> /home/ваш_пользователь/domains/ваш_домен/public_html/cron.log 2>&1
```
4. Сохраните файл (в nano: `Ctrl+O`, затем `Ctrl+X`)
## Определение пути к PHP
### Вариант 1: Автоматическое определение
```bash
which php
```
### Вариант 2: Проверка версии PHP
```bash
php -v
```
### Вариант 3: Если используется конкретная версия PHP
```bash
/usr/bin/php7.4 -q /путь/к/cron.php
# или
/usr/bin/php8.0 -q /путь/к/cron.php
# или
/usr/bin/php8.1 -q /путь/к/cron.php
```
## Определение полного пути к скрипту
1. Войдите в панель FastPanel
2. Перейдите в **"Файловый менеджер"**
3. Найдите файл `cron.php`
4. Скопируйте полный путь (обычно `/home/пользователь/domains/домен/public_html/cron.php`)
**Или через SSH:**
```bash
cd /путь/к/вашему/проекту
pwd
# Выведет полный путь, добавьте /cron.php
```
## Логирование выполнения
Для отслеживания работы cron рекомендуется настроить логирование:
### В FastPanel:
Добавьте в конец команды:
```bash
>> /home/ваш_пользователь/domains/ваш_домен/public_html/cron.log 2>&1
```
### Просмотр логов:
```bash
tail -f /home/ваш_пользователь/domains/ваш_домен/public_html/cron.log
```
## Частые проблемы и решения
### Проблема 1: "Permission denied"
**Решение:**
```bash
chmod 755 /home/ваш_пользователь/domains/ваш_домен/public_html/cron.php
chmod 755 -R /home/ваш_пользователь/domains/ваш_домен/public_html/files/
```
### Проблема 2: "PHP: command not found"
**Решение:**
Используйте полный путь к PHP:
```bash
/usr/bin/php -q /путь/к/cron.php
```
### Проблема 3: "Cannot connect to server"
**Решение:**
- Проверьте настройки в `inc/config.php`
- Убедитесь, что сервер доступен
- Проверьте логи: `tail -f cron.log`
### Проблема 4: "No such file or directory"
**Решение:**
- Проверьте правильность пути к скрипту
- Используйте абсолютный путь, а не относительный
### Проблема 5: Скрипт не выполняется
**Решение:**
1. Проверьте, что cron служба запущена:
```bash
systemctl status cron
# или
service cron status
```
2. Проверьте логи cron:
```bash
grep CRON /var/log/syslog
# или
tail -f /var/log/cron
```
3. Убедитесь, что в команде используется `-q` флаг (quiet mode)
## Тестирование cron задачи
### Ручной запуск через SSH:
```bash
/usr/bin/php -q /полный/путь/к/cron.php
```
### Проверка через веб-браузер:
Откройте в браузере:
```
```
**Внимание:** После тестирования через браузер рекомендуется закрыть доступ к `cron.php` через `.htaccess` для безопасности.
## Безопасность
### Защита cron.php от прямого доступа через браузер
Создайте или отредактируйте файл `.htaccess` в корне проекта:
```apache
# Запрет прямого доступа к cron.php
<Files "cron.php">
Order allow,deny
Deny from all
</Files>
```
**Или для Nginx** добавьте в конфигурацию:
```nginx
location ~ /cron\.php$ {
deny all;
return 404;
}
```
## Примеры расписания
| Описание | Cron выражение |
|----------|---------------|
| Каждую минуту | `* * * * *` |
| Каждые 5 минут | `*/5 * * * *` |
| Каждые 10 минут | `*/10 * * * *` |
| Каждые 15 минут | `*/15 * * * *` |
| Каждый час | `0 * * * *` |
| Каждый день в 3:00 | `0 3 * * *` |
| Каждый понедельник в 2:00 | `0 2 * * 1` |
## Проверка работы
После настройки cron:
1. Подождите 5-10 минут
2. Проверьте директорию `files/server_X/` - должны появиться новые файлы
3. Проверьте логи: `tail -f cron.log`
4. Проверьте, что старые файлы удаляются (через 3 дня)
## Дополнительная информация
- Скрипт автоматически создает директории `files/server_X/` если их нет
- Файлы старше 3 дней автоматически удаляются
- Текущие демо-файлы (моложе 180 секунд) не скачиваются, чтобы не прерывать запись