# Jobs e o agendador

O agendador num contêiner ou num servidor, tarefas de manutenção e verificações.

Todo site Nimbly precisa do agendador rodando, mesmo sem tarefas próprias: ele processa a fila de jobs e faz a manutenção do framework. Esta página trata de como rodá-lo; [Trabalho em segundo plano](/pt/docs/guides/jobs/) trata de como escrever jobs e tarefas.

## Num contêiner

A imagem do contêiner roda o agendador sozinha a cada minuto. Com vários contêineres num volume compartilhado, uma trava faz com que só um deles execute o trabalho.

## Num servidor próprio

Instale o agendador uma vez por servidor, registre cada site nele e instale a entrada do cron:

```bash
sudo php core/cli/nimbly.php scheduler:install
sudo php core/cli/nimbly.php scheduler:project:add my-site /var/www/my-site
sudo php core/cli/nimbly.php scheduler:cron:install --user=www-data
```

Uma entrada do cron atende todos os sites registrados. A cada minuto ela inicia dois workers por site, um para a fila de jobs e outro para a agenda do site, para que uma tarefa longa num site nunca atrase outro. No máximo cinco workers rodam ao mesmo tempo num servidor, configurável com `NIMBLY_SCHEDULER_MAX_CONCURRENCY`. A saída vai para `/var/log/nimbly-scheduler.log`, rotacionado semanalmente.

```bash
php core/cli/nimbly.php scheduler:project:list
sudo -u www-data php core/cli/nimbly.php scheduler:run --dry-run
php core/cli/nimbly.php scheduler:cron:status
```

## Manutenção que sempre roda

| Tarefa | A cada |
|---|---|
| Processar os jobs na fila | minuto |
| Remover sessões expiradas | 30 minutos |
| Arquivar as estatísticas de requisições | hora |
| Remover jobs concluídos com mais de 30 dias | dia |
| Remover histórico com mais de 90 dias | dia |
| Remover execuções de agentes com mais de 30 dias | dia |

A agenda própria de um site acrescenta tarefas; ela não pode remover estas. Um projeto pode substituir o funcionamento de um comando de manutenção definindo o mesmo comando em `ext/cli/commands.php`.

## Verifique

```bash
./nimbly schedule:status
```

informa a última execução bem-sucedida de cada tarefa de manutenção e termina com erro quando uma tarefa falhou, nunca rodou ou está atrasada. O painel do admin mostra o mesmo em **Needs attention**. Verifique depois de cada deploy: uma entrada no cron, sozinha, não prova que o trabalho roda.

## A fila

`/nb-admin/jobs` mostra os jobs na fila, em execução, concluídos e falhos, com o último erro de cada um. **Run due jobs now** processa a fila na hora; jobs concluídos e jobs que falharam de vez são removidos após 30 dias. `./nimbly jobs:run` processa um job pela linha de comando, `./nimbly jobs:run 25` até 25.
