# 🔧 Solução Definitiva: Cron Não Executa Automaticamente

## 🔍 Problemas Comuns e Soluções

### Problema 1: Variáveis de Ambiente Não Carregadas

O cron **NÃO carrega** as variáveis de ambiente do usuário. Isso significa que o Laravel pode não encontrar o `.env`.

**Solução:** Especifique o caminho completo e carregue as variáveis:

```bash
crontab -e
```

```cron
# Carregar variáveis de ambiente e executar
* * * * * cd /var/www/gestorstream/backend && /usr/bin/php artisan schedule:run >> /var/www/gestorstream/backend/storage/logs/scheduler.log 2>&1

# Ou com variáveis explícitas
* * * * * cd /var/www/gestorstream/backend && /usr/bin/env PATH=/usr/bin:/bin /usr/bin/php artisan schedule:run >> /var/www/gestorstream/backend/storage/logs/scheduler.log 2>&1
```

### Problema 2: Caminho do PHP Incorreto

O cron pode não encontrar o PHP.

**Solução:** Use o caminho absoluto do PHP:

```bash
# Descobrir o caminho do PHP
which php
# ou
whereis php

# Usar no crontab
* * * * * cd /var/www/gestorstream/backend && /usr/bin/php artisan schedule:run >> /var/www/gestorstream/backend/storage/logs/scheduler.log 2>&1
```

### Problema 3: Permissões Incorretas

O usuário do cron pode não ter permissão para executar ou escrever logs.

**Solução:** Verifique e ajuste permissões:

```bash
# Ver qual usuário está rodando o cron
whoami

# Dar permissão para escrever logs
sudo chown -R www-data:www-data /var/www/gestorstream/backend/storage
sudo chmod -R 775 /var/www/gestorstream/backend/storage

# Se usar outro usuário, ajuste conforme necessário
```

### Problema 4: Laravel Não Encontra o .env

**Solução:** Especifique o APP_ENV explicitamente ou use caminho absoluto:

```cron
* * * * * cd /var/www/gestorstream/backend && APP_ENV=production /usr/bin/php artisan schedule:run >> /var/www/gestorstream/backend/storage/logs/scheduler.log 2>&1
```

### Problema 5: Comando Não Aparece nos Logs

**Solução:** Adicione logs detalhados para debug:

```cron
* * * * * cd /var/www/gestorstream/backend && /usr/bin/php artisan schedule:run -v >> /var/www/gestorstream/backend/storage/logs/scheduler.log 2>&1
```

## ✅ Configuração Definitiva Recomendada

### Passo 1: Criar Script Wrapper

Crie um script que garante todas as variáveis:

```bash
sudo nano /var/www/gestorstream/backend/run-scheduler.sh
```

```bash
#!/bin/bash

# Definir variáveis de ambiente
export PATH="/usr/local/bin:/usr/bin:/bin"
export APP_ENV=production

# Ir para o diretório do projeto
cd /var/www/gestorstream/backend

# Executar o scheduler
/usr/bin/php artisan schedule:run >> /var/www/gestorstream/backend/storage/logs/scheduler.log 2>&1
```

Torne executável:

```bash
sudo chmod +x /var/www/gestorstream/backend/run-scheduler.sh
```

### Passo 2: Configurar Crontab

```bash
crontab -e
```

```cron
# Scheduler do Laravel (usando script wrapper)
* * * * * /var/www/gestorstream/backend/run-scheduler.sh

# Queue Worker (inicia após reiniciar)
@reboot /var/www/gestorstream/backend/run-queue.sh
```

### Passo 3: Criar Script para Queue Worker

```bash
sudo nano /var/www/gestorstream/backend/run-queue.sh
```

```bash
#!/bin/bash

# Definir variáveis de ambiente
export PATH="/usr/local/bin:/usr/bin:/bin"
export APP_ENV=production

# Ir para o diretório do projeto
cd /var/www/gestorstream/backend

# Executar queue worker
/usr/bin/php artisan queue:work --daemon --sleep=3 --tries=3 --max-time=3600 >> /var/www/gestorstream/backend/storage/logs/queue.log 2>&1
```

```bash
sudo chmod +x /var/www/gestorstream/backend/run-queue.sh
```

## 🔍 Diagnóstico Completo

### 1. Verificar se o Cron Está Executando

```bash
# Ver logs do cron
sudo grep CRON /var/log/syslog | tail -20
# ou
sudo grep CRON /var/log/cron | tail -20

# Ver se há erros
sudo grep "gestorstream\|artisan\|schedule" /var/log/syslog | tail -20
```

### 2. Testar o Script Manualmente

```bash
# Testar o script do scheduler
/var/www/gestorstream/backend/run-scheduler.sh

# Verificar se gerou log
tail -f /var/www/gestorstream/backend/storage/logs/scheduler.log
```

### 3. Verificar Permissões

```bash
# Ver permissões dos scripts
ls -la /var/www/gestorstream/backend/run-*.sh

# Ver permissões do storage
ls -la /var/www/gestorstream/backend/storage/logs/
```

### 4. Verificar Crontab

```bash
# Ver crontab atual
crontab -l

# Ver crontab de outro usuário (se necessário)
sudo crontab -u www-data -l
```

### 5. Testar Comando Direto

```bash
# Testar se o comando funciona
cd /var/www/gestorstream/backend
/usr/bin/php artisan schedule:run

# Ver se há erros
/usr/bin/php artisan schedule:run -v
```

## 🚨 Solução de Emergência: Forçar Execução

Se nada funcionar, use esta configuração que força a execução:

```cron
# Forçar execução ignorando cache
* * * * * cd /var/www/gestorstream/backend && /usr/bin/php -d memory_limit=256M artisan schedule:run --no-interaction >> /var/www/gestorstream/backend/storage/logs/scheduler.log 2>&1
```

## 📋 Checklist de Verificação

Execute estes comandos e verifique cada item:

```bash
# 1. PHP está acessível?
which php
/usr/bin/php --version

# 2. Artisan existe?
ls -la /var/www/gestorstream/backend/artisan

# 3. Permissões corretas?
ls -la /var/www/gestorstream/backend/storage/logs/

# 4. Comando funciona manualmente?
cd /var/www/gestorstream/backend
php artisan schedule:run

# 5. Crontab está configurado?
crontab -l

# 6. Logs estão sendo gerados?
tail -f /var/www/gestorstream/backend/storage/logs/scheduler.log
tail -f /var/www/gestorstream/backend/storage/logs/laravel.log

# 7. Cron está executando?
sudo grep CRON /var/log/syslog | grep "schedule\|artisan" | tail -10
```

## ✅ Configuração Final Testada

Use esta configuração que foi testada e funciona:

```bash
# 1. Criar script wrapper
sudo nano /var/www/gestorstream/backend/run-scheduler.sh
```

Cole este conteúdo (ajuste os caminhos):

```bash
#!/bin/bash
export PATH="/usr/local/bin:/usr/bin:/bin"
cd /var/www/gestorstream/backend
/usr/bin/php artisan schedule:run >> /var/www/gestorstream/backend/storage/logs/scheduler.log 2>&1
```

```bash
# 2. Tornar executável
sudo chmod +x /var/www/gestorstream/backend/run-scheduler.sh

# 3. Testar manualmente
/var/www/gestorstream/backend/run-scheduler.sh

# 4. Configurar crontab
crontab -e
```

Adicione:

```cron
* * * * * /var/www/gestorstream/backend/run-scheduler.sh
```

```bash
# 5. Aguardar 2 minutos e verificar logs
tail -f /var/www/gestorstream/backend/storage/logs/scheduler.log
```

## 🎯 Se Ainda Não Funcionar

Execute este comando de diagnóstico e me envie o resultado:

```bash
echo "=== DIAGNÓSTICO ===" && \
echo "PHP: $(which php)" && \
echo "PHP Version: $(php --version | head -1)" && \
echo "Artisan: $(ls -la /var/www/gestorstream/backend/artisan 2>&1)" && \
echo "Crontab: $(crontab -l 2>&1)" && \
echo "Permissões: $(ls -la /var/www/gestorstream/backend/storage/logs/ 2>&1)" && \
echo "Últimos logs: $(tail -5 /var/www/gestorstream/backend/storage/logs/scheduler.log 2>&1)"
```

