Cron Jobs - Serviços Agendados
Antes de começar
Antes de proceder certifique-se que que tem noções básicas em JavaScript e que já tem as noções básicas do Netuno com o passo-a-passo disponível na Academia.
Introdução
É comum a necessidade de executar tarefas periodicamente, ou seja, de tempos em tempos é necessário enviar dados para outro sistema, ou importar dados de outro sistema, disparar um e-mail, validar registos em base de dados, e muito mais...
No Linux/UNIX/Mac existe o serviço Cron com o famoso ficheiro de configuração crontab, já no Windows existe o Task Manager (Gestor de Tarefas).
E no Netuno o Cron Jobs já vem integrado, ajudando assim a evitar configurações externas.
Este tipo de operações periódicas são conhecidas como Cron Jobs ou em português Serviços Agendados.
Cada aplicação do Netuno pode ter inúmeros Cron Jobs, e os Cron Jobs do Netuno tanto podem executar serviços e URLs internos, como também URLs externos.
Para mais informações verifique a documentação do recurso cron.
Como Funciona
Cada aplicação tem a configuração dos seus próprios serviços agendados (cron jobs) com a respectiva configuração de execução.
Para simplificar cada serviço agendado é um job à parte, que tem a sua própria configuração de execução, podendo ser executado a cada minuto, de 5 em 5 minutos, a cada hora, num determinado dia e hora da semana, etc... também tem o URL que será chamado quando for o momento da sua execução.
O Netuno utiliza a biblioteca Quartz Scheduler para gerir a execução dos serviços agendados. A configuracão das regras de temporização é respectiva a esta biblioteca.
Assim, a execução de cada job passa pela execução de um URL (endereço web, link), que tanto pode ser externo como interno da própria aplicação. Ao ser um link externo tanto pode ser de uma outra aplicação como de um URL qualquer externo na internet, na rede ou no computador.
No gráfico acima demonstra que o Netuno contém 2 aplicações, onde cada uma tem configurado 2 jobs (serviços agendados), que são executados em momentos diferentes, respectivos a uma configuração qualquer.
O comportamento da execução que irá contecer é o seguinte:
- App 1 lança 2 jobs:
- Job 1: Executa um URL de serviço interno da própria App 1.
- Job 2: Executa um URL externo, público.
- App 2 lança 2 jobs:
- Job 3: Executa um URL de serviço interno da própria App 2
- Job 4: Executa um URL de serviço da App 1.
As aplicações devem ter os serviços que são executados pelo Cron Jobs dentro da pasta:
- 📂
server/services/jobs
Cada URL é executado com o método HTTP POST. Na configuração do job permite adicionar parâmetros adicionais, e também uma chave de segredo para evitar que seja executada fora do contexto controlado.
Configuração
A configuração dos serviços agendados é realizada no ficheiro de configuração da aplicação, de acordo com o ambiente.
A configuração nunca deve começar com
*isto irá provocar a execução a cada segundo, gerando assim, complicações de performance com efeito de bola de neve em caso do processamento em algum momento demore mais que 1 segundo.
Para o fazer, navegue dentro da aplicação que está a desenvolver até ao ficheiro de configuração de ambiente. Neste exemplo, iremos utilizar o ficheiro de ambiente de desenvolvimento localizado em:
- 📂
config/_development.json
Verifique se já não existem configurações para o Cron, se não existir adicione no fim do ficheiro de configuração (em formato JSON) os parâmetros de configuração:
{
...
"cron": {
"secret": "m3u-S3Gred0",
"jobs": [
{
"name": "meu-job",
"config": "0 30 12 * * ?",
"url": "http://minha-app.local.netu.no:9000/jobs/meu-job"
},
{
"name": "meu-job",
"config": "0 0/2 * * * ?",
"url": "http://minha-app.local.netu.no:9000/jobs/meu-outro-job",
"params": {
"secret": "m3u-Ou7ro-S3Gred0",
"tipo": "cliente"
}
}
]
},
...
}
Nesta configuração o primeiro job será executado todos os dias ao meio dia e trinta minutos.
E o segundo job executará a cada 2 minutos.
Jobs
A lista de serviços agendados que temos na aplicação, sendo um array podemos ter múltiplas serviços configurados.
Secret
É um parâmetro de chave de segurança que protege o serviço, para ser executado apenas quando receber este parâmetro com o valor exatamente igual.
Isto porque o jobs são serviços públicos e para evitar que sejam executados externamente contêm esta proteção.
Name
O nome que identifica o serviço internamente, o qual poderá ser utilizado para realizar manipulação de gestão, como parar e retomar.
Config
A configuração da expressão da temporização do serviço, ou seja, as regras do seu agendamento.
A configuração nunca deve começar com
*isto irá provocar a execução a cada segundo, gerando assim, complicações de performance com efeito de bola de neve em caso do processamento em algum momento demore mais que 1 segundo.
Verifique abaixo as expressões suportadas.
URL
O endereço que será executado periodicamente.
Params
São os parâmetros que são passados para o URL na sua execução, o URL é executado com o método HTTP POST e assim podem ser adicionados parâmetros adicionais como o tipo no exemplo acima, ou até especificar outra chave secreta.
Formato suportados das expressões Cron
| NOME DO CAMPO | OBRIGATÓRIO | VALORES ACEITES | CARACTERES ESPECIAIS PERMITIDOS |
|---|---|---|---|
| Segundos | SIM | 0-59 | , - * / |
| Minutos | SIM | 0-59 | , - * / |
| Horas | SIM | 0-23 | , - * / |
| Dia do Mês | SIM | 1-31 | , - * ? / L W |
| Mês | SIM | 1-12 or JAN-DEC | , - * / |
| Dia da semana | SIM | 1-7 or SUN-SAT | , - * ? / L # |
| Ano | NÃO | vazio, 1970-2099 | , - * / |