【问题标题】:NodeJS, Express and Forever: app going to sleepNodeJS、Express 和 Forever:应用程序进入休眠状态
【发布时间】:2016-06-09 23:52:04
【问题描述】:

我有一个 Express 网站,用 nodeJS 编写,尽管我一直在运行它,但它似乎要进入休眠状态。

具体来说,我有一个 app.js 模块,它导出两个实例(我没有显示 app 对象的定义,因为它相当长——它只是设置了 express 服务器运行的环境):

var updaters = new CronJobManager( );

// hourly update just to show we're working
updaters.add( 'hourly update', '0 0 * * * *', function() {
    winston.info( 'executing hourly update...' )
} );

updaters.add( 'daily update', '0 0 0 * * *', function() {
    winston.info( 'executing daily update...' )
    dailyUpdate( );
} );

module.exports.app = app;
module.exports.updaters = updaters;

CronJobManager 实例创建了两个 cron 作业,其中一个应该每天调用一次,另一个应该每小时调用一次。 dailyUpdate() 是 app.js 中定义的一个函数,用于更新多个对象中的值。

我在 bin/www 中调用它如下(这是使用基本的 Express4 文件布局):

#!/usr/bin/env node
var debug = require('debug')('XmasLights');
var winston = require('../logger.js');
var app = require('../app').app;
var updaters = require('../app').updaters;

app.set('port', process.env.PORT || 3000);

var server = app.listen(app.get('port'), function() {
    debug('Express server listening on port ' + server.address().port);
});

winston.info('started webserver');

updaters.start('hourly update');
updaters.start('daily update');

winston.info('started updaters');

一切正常,但如果网站访问时间不够长,应用程序似乎进入睡眠状态,并且不会调用 cronjob 回调。但是,一旦访问该站点,它们就会被调用。

我认为这会永远阻止快速应用程序进入睡眠状态,但显然这是不正确的。或者我错过了什么。

如何保持 CronJobManager 实例运行?我需要在单独的进程中运行它吗?如果是这样,我该怎么做?

【问题讨论】:

  • 应用程序是否进入睡眠状态?还是托管它的计算机进入睡眠状态?
  • 好问题。它在树莓派 2 上运行。据我所知,我可以通过谷歌确定或找到,树莓派永远不会休眠。

标签: node.js express cron


【解决方案1】:

我将此作为“答案”发布,但这实际上更像是一种解决方法。

我能够通过设置每 10 分钟执行一次的 keep-alive cronjob 来保持 express 应用程序的运行。

如果没有这种解决方法,应用程序会进入某种等待模式,即使它仍在运行,就永远而言。只需访问该网站即可“唤醒”它,此时挂起的 cronjobs 将运行。不幸的是,当您有应该在特定时间运行的 cronjobs 时,这并不是特别有用。

【讨论】:

    猜你喜欢
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    • 2017-11-05
    • 2011-05-04
    相关资源
    最近更新 更多