Um empacotador cronjob que gerencia muitos jobs de uma vez, com várias opções de controle. Isso foi construído baseado no projeto [cron-job-manager] (https://www.npmjs.com/package/cron-job-manager).
$ npm install empacotador-cronjob
$ npm test empacotador-cronjob
Qualquer assertion que falhe deve gerar um erro não detectado.
// Carregando biblioteca
const CronJobManager = require('empacotador-cronjob');
// Cria um gerenciador, para um novo trabalho.
const manager = new CronJobManager('trabalho_um','0 30 * * * *', () => {
console.log("Realizando o trabalho um...");
};
// Outro Trabalho
manager.add('trabalho_dois', '0 40 * * * *', () => {
console.log('Realizando o trabalho dois...');
});
// Inicia o trabalho
manager.start('trabalho_um');
// Para o trabalho
manager.stop('trabalho_um');
// Verifica se um trabalho existe
manager.exists('trabalho_um'); //true
// Atualiza um trabalho
manager.update('trabalho_um', "0 */2 * * * *", () => {
console.log("Agora realizando este trabalho a cada dois minutos, usando esta função...");
});
console.log(`Os trabalhos atuais são: ${manager}`);
Criar um objeto objeto de gerenciamento é fácil, você pode criar um com argumentos que se tornam uma nova tarefa ou apenas criar um para adicionar tarefas posteriormente:
const manager1 = new CronJobManager('nome_trabalho', '30 * * * * *', taskFunction,
{
start: true,
onComplete: taskCompleteFunction,
timeZone:"America/Sao_Paulo"
});
const manager2 = new CronJobManager();
// Execute o trabalho neste momento nesta data.
const dateToRun = new Date('2020-08-03T17:35:43-0400');
const manager3 = new CronJob('um_temporizador', dateToRun, () => {
console.log('Escute com atenção.. Direi isso apenas uma vez!');
}, options);
O objeto de opções finais é opcional, essas são opções passadas para o empacotador-cronjob e incluem o seguinte:
- start: true/false
- onComplete: function - é executado quando o trabalho é interrompido
Trabalhos são adicionados com argumentos semelhantes aos anteriores com a função add
manager.add('nome_trabalho','* 30 * * * *', taskFunction);
Neste caso, com o objeto de opções finais deixado de fora dos argumentos, o trabalho será criado com os padrões de empacotador-cronjob, isso significa que o trabalho não será iniciado até que você diga para ele, não haverá função de conclusão e o fuso horário será o padrão para o que você tiver definido para usar o processo node.js.
Se a chave que você está usando já existe no gerenciador, essa chave será sobrescrita, o trabalho original será interrompido e este ocupará o seu lugar. Um aviso será impresso no log quando isso acontecer.
No lugar de uma expressão crontab, você pode usar um objeto JS Date.
Para iniciar um trabalho, você pode usar a função start
manager.start('nome_trabalho');
Parar é só usar a função stop
manager.stop('nome_trabalho');
Para parar todos os trabalhos no gerenciador, use a função stopAll
manager.stopAll();
Quaisquer argumentos são ignorados.
Você pode querer alterar a tarefa de qualquer trabalho durante a execução. Você pode fazer isso usando o função update
manager.update('nome_trabalho', '0 15 3,5,9,14,18,20 * * *', () => {
// Faça isso neste novo cronograma
});
manager.update('nome_trabalho', () => {
// Faça isso ao invés
});
// Em vez disso, faça-o nesta programação.
manager.update('nome_trabalho', '0 15 3,5,9,14,18,20 * * *');
O trabalho antigo na programação anterior será interrompido, alterado e reiniciado se estava em execução quando você chamou a função update.
Se você estiver apenas alterando a função, o trabalho continuará a usar o esquema atual.
Se você estiver apenas alterando a programação, o trabalho continuará a usar a função atual.
Você pode excluir qualquer trabalho interrompido ou em execução usando a função deleteJob
manager.deleteJob('nome_trabalho');
O trabalho será interrompido e, em seguida, removido do gerenciador, qualquer tentativa de alterar a chave após a exclusão resultará em uma mensagem de erro no log, uma vez que ele não existe mais.
Se quiser ver quais tarefas que configurou, basta passar seu gerenciador como uma string. Ele exibirá uma lista formatada de jobs e seus crontabs, e se eles têm uma função a ser executada.
console.log(`trabalhos atuais: ${manager}`);
Se precisar de mais detalhes ou quiser passar a string para outro lugar, você pode usar a função listCrons
const jobs = manager.listCrons();
doSomethingWithJobList(jobs);
Para verificar se existe um trabalho com uma chave específica, use a função exists
if (manager.exists('nome_trabalho')) {
console.log('nome_trabalho exist');
}