【发布时间】: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 上运行。据我所知,我可以通过谷歌确定或找到,树莓派永远不会休眠。