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ê?


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


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.


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.


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.


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).

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.


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)


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




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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.