Child processes are now terminated when the parent process dies. This means that if the main mailtrain process gets killed, there are no processes which remain running.
This commit is contained in:
parent
1270ca71f8
commit
fcd2a61b65
14 changed files with 48 additions and 18 deletions
|
@ -38,17 +38,6 @@ if (config.title) {
|
||||||
process.title = config.title;
|
process.title = config.title;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
const cleanExit = () => process.exit();
|
|
||||||
process.on('SIGINT', cleanExit); // catch ctrl-c
|
|
||||||
process.on('SIGTERM', cleanExit); // catch kill
|
|
||||||
|
|
||||||
process.on('exit', function() {
|
|
||||||
// TODO
|
|
||||||
});
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
async function startHTTPServer(appType, appName, port) {
|
async function startHTTPServer(appType, appName, port) {
|
||||||
const app = await appBuilder.createApp(appType);
|
const app = await appBuilder.createApp(appType);
|
||||||
app.set('port', port);
|
app.set('port', port);
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const config = require('config');
|
const config = require('config');
|
||||||
const fork = require('child_process').fork;
|
const fork = require('./fork').fork;
|
||||||
const log = require('./log');
|
const log = require('./log');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const fs = require('fs-extra')
|
const fs = require('fs-extra')
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const fork = require('child_process').fork;
|
const fork = require('./fork').fork;
|
||||||
const log = require('./log');
|
const log = require('./log');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const bluebird = require('bluebird');
|
const bluebird = require('bluebird');
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const fork = require('child_process').fork;
|
const fork = require('./fork').fork;
|
||||||
const log = require('./log');
|
const log = require('./log');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const senders = require('./senders');
|
const senders = require('./senders');
|
||||||
|
|
31
server/lib/fork.js
Normal file
31
server/lib/fork.js
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
const builtinFork = require('child_process').fork;
|
||||||
|
|
||||||
|
const cleanExit = () => process.exit();
|
||||||
|
process.on('SIGINT', cleanExit); // catch ctrl-c
|
||||||
|
process.on('SIGTERM', cleanExit); // catch kill
|
||||||
|
|
||||||
|
const children = [];
|
||||||
|
|
||||||
|
process.on('message', msg => {
|
||||||
|
if (msg === 'exit') {
|
||||||
|
cleanExit();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
process.on('exit', function() {
|
||||||
|
for (const child of children) {
|
||||||
|
child.send('exit');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function fork(path, args, opts) {
|
||||||
|
const child = builtinFork(path, args, opts);
|
||||||
|
|
||||||
|
children.push(child);
|
||||||
|
return child;
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports.fork = fork;
|
|
@ -1,7 +1,7 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const knex = require('./knex');
|
const knex = require('./knex');
|
||||||
const fork = require('child_process').fork;
|
const fork = require('./fork').fork;
|
||||||
const log = require('./log');
|
const log = require('./log');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const {ImportStatus, RunStatus} = require('../../shared/imports');
|
const {ImportStatus, RunStatus} = require('../../shared/imports');
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const fork = require('child_process').fork;
|
const fork = require('./fork').fork;
|
||||||
const log = require('./log');
|
const log = require('./log');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const knex = require('./knex');
|
const knex = require('./knex');
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
const config = require('config');
|
const config = require('config');
|
||||||
const reportHelpers = require('../lib/report-helpers');
|
const reportHelpers = require('../lib/report-helpers');
|
||||||
const fork = require('child_process').fork;
|
const fork = require('../lib/fork').fork;
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const log = require('../lib/log');
|
const log = require('../lib/log');
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
|
|
|
@ -8,6 +8,7 @@ const { CampaignType, CampaignStatus, CampaignSource } = require('../../shared/c
|
||||||
const util = require('util');
|
const util = require('util');
|
||||||
const campaigns = require('../models/campaigns');
|
const campaigns = require('../models/campaigns');
|
||||||
const contextHelpers = require('../lib/context-helpers');
|
const contextHelpers = require('../lib/context-helpers');
|
||||||
|
require('../lib/fork');
|
||||||
|
|
||||||
const { tLog } = require('../lib/translate');
|
const { tLog } = require('../lib/translate');
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@ const shares = require('../models/shares');
|
||||||
const { tLog } = require('../lib/translate');
|
const { tLog } = require('../lib/translate');
|
||||||
const {ListActivityType} = require('../../shared/activity-log');
|
const {ListActivityType} = require('../../shared/activity-log');
|
||||||
const activityLog = require('../lib/activity-log');
|
const activityLog = require('../lib/activity-log');
|
||||||
|
require('../lib/fork');
|
||||||
|
|
||||||
|
|
||||||
const csvparse = require('csv-parse');
|
const csvparse = require('csv-parse');
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const config = require('config');
|
const config = require('config');
|
||||||
const fork = require('child_process').fork;
|
const fork = require('../lib/fork').fork;
|
||||||
const log = require('../lib/log');
|
const log = require('../lib/log');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const knex = require('../lib/knex');
|
const knex = require('../lib/knex');
|
||||||
|
@ -11,6 +11,7 @@ const campaigns = require('../models/campaigns');
|
||||||
const builtinZoneMta = require('../lib/builtin-zone-mta');
|
const builtinZoneMta = require('../lib/builtin-zone-mta');
|
||||||
const {CampaignActivityType} = require('../../shared/activity-log');
|
const {CampaignActivityType} = require('../../shared/activity-log');
|
||||||
const activityLog = require('../lib/activity-log');
|
const activityLog = require('../lib/activity-log');
|
||||||
|
require('../lib/fork');
|
||||||
|
|
||||||
|
|
||||||
let messageTid = 0;
|
let messageTid = 0;
|
||||||
|
|
|
@ -5,6 +5,7 @@ const log = require('../lib/log');
|
||||||
const mailers = require('../lib/mailers');
|
const mailers = require('../lib/mailers');
|
||||||
const CampaignSender = require('../lib/campaign-sender');
|
const CampaignSender = require('../lib/campaign-sender');
|
||||||
const {enforce} = require('../lib/helpers');
|
const {enforce} = require('../lib/helpers');
|
||||||
|
require('../lib/fork');
|
||||||
|
|
||||||
const workerId = Number.parseInt(process.argv[2]);
|
const workerId = Number.parseInt(process.argv[2]);
|
||||||
let running = false;
|
let running = false;
|
||||||
|
|
|
@ -12,6 +12,7 @@ const knex = require('../../../lib/knex');
|
||||||
const contextHelpers = require('../../../lib/context-helpers');
|
const contextHelpers = require('../../../lib/context-helpers');
|
||||||
const {renderCsvFromStream} = require('../../../lib/report-helpers');
|
const {renderCsvFromStream} = require('../../../lib/report-helpers');
|
||||||
const stream = require('stream');
|
const stream = require('stream');
|
||||||
|
require('../../../lib/fork');
|
||||||
|
|
||||||
async function main() {
|
async function main() {
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -10,5 +10,10 @@ module.exports.init = (app, done) => {
|
||||||
type: 'zone-mta-started'
|
type: 'zone-mta-started'
|
||||||
});
|
});
|
||||||
|
|
||||||
|
process.on('message', msg => {
|
||||||
|
if (msg === 'exit') {
|
||||||
|
process.exit(); }
|
||||||
|
});
|
||||||
|
|
||||||
done();
|
done();
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue