# 🚀 Configuração para Servidor de Produção

## ✅ Sim, vai funcionar normalmente!

O scheduler do Laravel funciona **muito melhor** em servidores Linux de produção do que no Windows de desenvolvimento.

## 🔧 Configuração Necessária

### 1. Configurar o Cron no Linux

No servidor de produção (Linux), você precisa adicionar uma entrada no crontab para executar o scheduler a cada minuto:

```bash
# Editar o crontab
crontab -e

# Adicionar esta linha (ajuste o caminho conforme necessário)
* * * * * cd /caminho/para/seu/projeto/backend && php artisan schedule:run >> /dev/null 2>&1
```

**Exemplo completo:**
```bash
* * * * * cd /var/www/gestorstream/backend && php artisan schedule:run >> /dev/null 2>&1
```

### 2. Verificar Permissões

Certifique-se de que:
- O usuário do cron tem permissão para executar PHP
- O usuário do cron tem permissão para escrever nos logs
- O caminho do PHP está correto (pode usar `which php` para descobrir)

**Exemplo com caminho completo do PHP:**
```bash
* * * * * cd /var/www/gestorstream/backend && /usr/bin/php artisan schedule:run >> /dev/null 2>&1
```

### 3. Verificar se está Funcionando

Após configurar o cron, aguarde alguns minutos e verifique os logs:

```bash
# Ver logs do Laravel
tail -f /var/www/gestorstream/backend/storage/logs/laravel.log | grep "CheckExpiringClients"
```

Você deve ver entradas como:
```
[2025-12-09 20:00:00] local.INFO: CheckExpiringClients: Starting {"current_time_local":"17:00",...}
```

### 4. Verificar o Cron

Para verificar se o cron está executando:

```bash
# Ver logs do cron (pode variar dependendo da distribuição)
grep CRON /var/log/syslog
# ou
grep CRON /var/log/cron
```

## 📋 Checklist de Produção

- [ ] Cron configurado para executar `php artisan schedule:run` a cada minuto
- [ ] Permissões corretas para o usuário do cron
- [ ] Caminho do PHP correto no crontab
- [ ] Logs sendo gerados corretamente
- [ ] Timezone configurado corretamente no `.env` (ex: `APP_TIMEZONE=America/Sao_Paulo`)
- [ ] `APP_USER_TIMEZONE=America/Sao_Paulo` configurado no `.env` (se aplicável)

## 🔍 Diferenças entre Windows e Linux

| Aspecto | Windows (Desenvolvimento) | Linux (Produção) |
|---------|---------------------------|------------------|
| Scheduler | Task Scheduler | Cron |
| Configuração | Mais complexa | Mais simples |
| Confiabilidade | Pode ter atrasos | Muito confiável |
| Logs | scheduler.log | syslog/cron.log |

## ⚠️ Importante

1. **Timezone**: Certifique-se de que o timezone está configurado corretamente no `.env`:
   ```
   APP_TIMEZONE=America/Sao_Paulo
   APP_USER_TIMEZONE=America/Sao_Paulo
   ```

2. **Permissões**: O usuário do cron precisa ter permissão para:
   - Executar PHP
   - Ler/escrever nos arquivos do projeto
   - Escrever nos logs

3. **Caminhos Absolutos**: Use caminhos absolutos no crontab para evitar problemas

## 🧪 Teste Rápido

Após configurar o cron, você pode testar manualmente:

```bash
cd /var/www/gestorstream/backend
php artisan schedule:run
php artisan clients:check-expiring --scheduler
```

Se ambos funcionarem, o cron também vai funcionar!

## 📝 Comandos Úteis

```bash
# Ver crontab atual
crontab -l

# Editar crontab
crontab -e

# Ver logs do Laravel em tempo real
tail -f storage/logs/laravel.log

# Verificar se o scheduler está rodando
ps aux | grep "schedule:run"

# Testar o comando manualmente
php artisan clients:check-expiring --scheduler
```

## ✅ Conclusão

**Sim, vai funcionar normalmente em produção!** Na verdade, vai funcionar **melhor** do que no Windows porque:

1. O cron do Linux é mais confiável que o Task Scheduler do Windows
2. A configuração é mais simples
3. O desempenho é melhor
4. Os logs são mais fáceis de monitorar

Basta configurar o crontab corretamente e está pronto!

