我知道使用setting.job
文件可以gracefully shutdown an Azure WebJob。这是我的档案:
{
"schedule": "0 */10 * * * *",
"stopping_wait_time": 120
}
我用javascript写了一个WebJob。 WebJob在Nodejs上运行。它按需配置,并由setting.job
每10分钟触发一次。出于某种原因,我的setting.job
文件没有正常关闭WebJob。它总是以失败告终。
也许我错过了某些内容,或者完全不了解WebJob的关闭是如何结束的,但最后我在run.js
中进行了一次令人讨厌的调整:
setTimeout(function () {
process.exit();
}, 30000);
这段代码在脚本结束时执行。我想知道在我使用的那个旁边是否有更优雅的解决方案。
run.js
示例:
const http = require('http');
const request = require('request');
const fb = require('firebase');
request(process.env.SourceUrl, function (error, response, body) {
'use strict';
if (!error && response.statusCode == 200) {
// Process data from body
} else {
console.log(error);
}
});
// Nasty hack to end gracefully
setTimeout(function () {
process.exit();
}, 6000);
答案 0 :(得分:1)
我认为优雅的方式是等待完成工作,而不是在处理中断。
const http = require('http');
const request = require('request');
const fb = require('firebase');
var sig = -1;
request(process.env.SourceUrl, function (error, response, body) {
'use strict';
if (!error && response.statusCode == 200) {
// Process data from body
sig = 0;
} else {
console.log(error);
sig = 1;
}
});
setInterval(function() {
if(sig > -1) {
process.exit(sig);
}
}, 6000);
答案 1 :(得分:0)
实现目标的更简洁方法是在完成业务逻辑后调用process.exit。这使您可以完全控制WebJob的生命周期。
const http = require('http');
const request = require('request');
const fb = require('firebase');
request(process.env.SourceUrl, function (error, response, body) {
'use strict';
if (!error && response.statusCode == 200) {
// Process data from body
//When finished
process.exit(0);
} else {
console.log(error);
process.exit(1); // provide a non-zero error, because the job failed
}
});