Existe uma biblioteca do agendador de tarefas para o node.js? [fechadas]

155

Existe algum cron como uma biblioteca que me permita agendar alguma função para ser executada em determinado horário (15:30, por exemplo, não x horas a partir de agora etc)? Se não houver esse tipo de biblioteca, como isso deve ser implementado? Devo apenas definir que o retorno de chamada seja chamado a cada segundo e verificar a hora e iniciar os trabalhos agendados para a hora ou o quê?

JtR
fonte
4
node-cron parece ser uma opção muito boa
JTR
var schedule = require ('programação do nó'); é as melhores coisas. Felicidades!!!
Saumyajit 27/09/19

Respostas:

122

node-cron faz exatamente o que eu descrevi

JtR
fonte
4
você escreve as declarações do cronjob em app.js / scripts.js?
ArVan
O node-cron permite editar tarefas do cron do sistema a partir do node.js? É dependente do processo do nó em execução? ou permitirá que você execute programas mesmo após o término do processo principal?
entreaberta
5
@Ajar não, após o término do processo nodejs, todos os trabalhos serão perdidos. Não existe uma tabela cron fornecido com nó-cron
Upvote
1
Acho que sim, @ChrisC. Se eu não estiver usando nenhuma estrutura, declaro crons em app.js. Em sails.jsI fazê-lo embootstrap
Arvan
2
@arVan Se você estiver interessado, eu realmente comecei a trabalhar em agendaadicionar suporte Waterline aqui: github.com/mikermcneil/agenda (literalmente apenas começou though- deve ter algum progresso utilizável na próxima semana)
mikermcneil
44

agendamento de nó Um agendador de tarefas do tipo cron e não cron para o Node.

Unitech
fonte
2
Isso evita a sintaxe do crontab, às vezes confusa, e é um pouco mais legível na minha opinião.
Simon East
como agenda costuras para fornecer persistência 0.1.13
drdrej
5
O agendamento de nós não fornece persistência. Pelos documentos: Note that node-schedule is designed for in-process scheduling, i.e. scheduled jobs will only fire as long as your script is running, and the schedule will disappear when execution completes.
Mike Hedman
34

agenda é um agendamento de trabalho leve para o nó. Isso irá ajudá-lo.

Fizer Khan
fonte
1
agenda é baseada no node-cron com uma camada persistente (mongo). então a resposta acima é melhor.
22414 drdrej
51
Para esclarecer, como o autor da ordem do dia, ele realmente não é baseada em nó-cron em tudo ...
Ryan
1
A biblioteca da agenda é a única melhor biblioteca, pois a configuração é simples e o uso é fácil para o usuário. Kudos @Ryan
Vimalraj Selvam
4
Descobri agendaum comportamento inconsistente e não recomendaria usá-lo. Verifique as questões em aberto e os PRs para fazer sua própria ligação.
Russbear
2
esteja ciente, a agenda não está pronta para produção. Possui problemas de vazamento de memória e verifica se há problemas. Ainda tem muitos bugs. Parece promissor quando estiver pronto.
Sebastian
15

O later.js é uma biblioteca de "agendador" JavaScript muito boa. Pode ser executado no Node.js ou em um navegador da web.

XåpplI'-I0llwlg'I -
fonte
3
Eu tentei algumas das sugestões neste tópico, mas este módulo eu achei o mais fácil de usar e direto para trabalhar. Obrigado!
Gene Bo
12

Estou usando o kue: https://github.com/learnboost/kue . É bem legal.

Os recursos oficiais e meus comentários:

  1. trabalhos atrasados.
    • Se você deseja deixar o trabalho ser executado em um horário específico, calcule os milissegundos entre esse horário e agora. Ligue para job.delay (milissegundos) (o documento indica minutos, o que está errado.) Não se esqueça de adicionar "jobs.promote ();" quando você inicia trabalhos.
  2. evento de trabalho e progresso pubsub.
    • Eu não entendo isso
  3. interface do usuário rica e integrada.
    • Muito útil. Você pode verificar o status do trabalho (concluído, em execução, atrasado) na interface do usuário integrada e não precisa escrever nenhum código. E você pode excluir registros antigos na interface do usuário.
  4. rolagem infinita
    • Às vezes não está funcionando. Tem que atualizar.
  5. Indicação de progresso da interface do usuário
    • Bom para trabalhos demorados.
  6. registro específico do trabalho
    • Como são trabalhos atrasados, você deve registrar informações úteis no trabalho e verificar mais tarde na interface do usuário.
  7. alimentado por Redis
    • Muito útil. Quando você reinicia o aplicativo node.js., todos os registros de tarefas ainda estão lá e as tarefas agendadas também serão executadas!
  8. tentativas opcionais
    • Agradável.
  9. recursos de pesquisa de texto completo
    • Boa.
  10. API JSON RESTful
    • Parece bom, mas nunca o uso.

Editar:

  1. O kue não é uma biblioteca do tipo cron.
  2. Por padrão, o kue não suporta trabalhos executados repetidamente (por exemplo, todos os domingos).
Vince Yuan
fonte
6
Kue é uma fila de trabalhos, não um agendador.
Leonid Beschastny
1
@LeonidBeschastny Kue é uma fila de empregos. E também é um agendador, porque pode "deixar-me agendar alguma função para ser executada em determinado momento".
Vince Yuan
Eu pensei que os trabalhos da Kue só podem ser adiados, mas não agendados para um determinado horário.
Leonid Beschastny
@LeonidBeschastny Você está certo. Kue não fornece API para agendar um trabalho para um determinado horário. Mas, como mencionei: "Se você deseja permitir que o trabalho seja executado em um horário específico, calcule os milissegundos entre esse horário e agora. Ligue para job.delay (milissegundos) (o documento indica minutos, o que está errado.)" É muito fácil .
Vince Yuan
1
Você poderia tentar Kue-scheduler, que é semelhante ao aganda
Fruch
9

O node-crontab permite editar tarefas cron do sistema a partir do node.js. O uso desta biblioteca permitirá que você execute programas mesmo após o término do processo principal. Disclaimer: Eu sou o desenvolvedor.

Blago
fonte
então ele persiste se o servidor do nó for redefinido?
jonperl
Sim, os trabalhos são mantidos.
quer
sua licença GPL, portanto não utilizável em um projeto comercial.
22414 drdrej
5
A licença agora é MIT
Blago
8

Você pode usar o timexe

É simples de usar, leve, não possui dependências, possui uma sintaxe aprimorada em relação ao cron, com uma resolução em milissegundos e funciona no navegador.

Instalar:

npm install timexe

Usar:

var timexe = require('timexe');
var res = timexe("* * * 15 30", function(){ console.log("It's now 3:30 pm"); });

(Eu sou o autor)

Simon Rigét
fonte
posso obter algum exemplo para isso, por favor?
Alex
1
Veja os exemplos no github: github.com/paragi/timexe
Simon Rigét 8/16
2

Eu sou o autor de node-runnr . Ele tem uma abordagem muito simples para criar emprego. Também é muito fácil e claro declarar tempo e intervalo. Por exemplo, para executar um trabalho a cada 10 minutos e 20 segundos,

Runnr.addIntervalJob('10:20', function(){...}, 'myjob')

Para fazer um trabalho diariamente às 10h e 15h,

Runnr.addDailyJob(['10:0:0', '15:0:0'], function(){...}, 'myjob')

É simples assim. Para mais detalhes: https://github.com/Saquib764/node-runnr

codedemon
fonte
1

Tanto o node-schedule quanto o node-cron que podemos usar para implementar agendadores baseados em cron.

NOTA : para gerar expressões cron, você pode usar este cron_maker

dush88c
fonte
0

Isso não será adequado para todos, mas se o seu aplicativo já estiver configurado para receber comandos por meio de um soquete, você poderá usar o netcat para emitir comandos via cron corretamente.

echo 'mycommand' | nc -U /tmp/myapp.sock
Adria
fonte