fix: "start" should wait for "stop" to remove the pid file(using Promise) (#1220)
This commit is contained in:
86
bin/cli.js
86
bin/cli.js
@@ -48,52 +48,59 @@ program.parse(process.argv);
|
|||||||
|
|
||||||
|
|
||||||
function start(options) {
|
function start(options) {
|
||||||
stop(options);
|
stop(options)
|
||||||
var dataDir = options.dataDir || path.join(process.env.HOME, '.cnpmjs.org');
|
// wait for "stop" method to remove the pid file
|
||||||
mkdirp.sync(dataDir);
|
.then(function () {
|
||||||
|
var dataDir = options.dataDir || path.join(process.env.HOME, '.cnpmjs.org');
|
||||||
|
mkdirp.sync(dataDir);
|
||||||
|
|
||||||
var configfile = path.join(dataDir, 'config.json');
|
var configfile = path.join(dataDir, 'config.json');
|
||||||
var config = {};
|
var config = {};
|
||||||
if (fs.existsSync(configfile)) {
|
if (fs.existsSync(configfile)) {
|
||||||
try {
|
try {
|
||||||
config = require(configfile);
|
config = require(configfile);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.warn('load old %s error: %s', configfile, err);
|
console.warn('load old %s error: %s', configfile, err);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
// config.enableCluster = !!options.cluster;
|
|
||||||
if (options.admins) {
|
|
||||||
config.admins = {};
|
|
||||||
for (var i = 0; i < options.admins.length; i++) {
|
|
||||||
config.admins[options.admins[i]] = options.admins[i] + '@localhost.com';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (options.scopes) {
|
|
||||||
config.scopes = options.scopes.map(function (name) {
|
|
||||||
if (name[0] !== '@') {
|
|
||||||
name = '@' + name;
|
|
||||||
}
|
}
|
||||||
return name;
|
// config.enableCluster = !!options.cluster;
|
||||||
|
if (options.admins) {
|
||||||
|
config.admins = {};
|
||||||
|
for (var i = 0; i < options.admins.length; i++) {
|
||||||
|
config.admins[options.admins[i]] = options.admins[i] + '@localhost.com';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (options.scopes) {
|
||||||
|
config.scopes = options.scopes.map(function (name) {
|
||||||
|
if (name[0] !== '@') {
|
||||||
|
name = '@' + name;
|
||||||
|
}
|
||||||
|
return name;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
var configJSON = JSON.stringify(config, null, 2);
|
||||||
|
fs.writeFileSync(configfile, configJSON);
|
||||||
|
|
||||||
|
debug('save config %s to %s', configJSON, configfile);
|
||||||
|
|
||||||
|
// if sqlite db file not exists, init first
|
||||||
|
initDatabase(function() {
|
||||||
|
require('../dispatch');
|
||||||
|
});
|
||||||
|
|
||||||
|
fs.writeFileSync(path.join(dataDir, 'pid'), process.pid + '');
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
|
||||||
var configJSON = JSON.stringify(config, null, 2);
|
|
||||||
fs.writeFileSync(configfile, configJSON);
|
|
||||||
|
|
||||||
debug('save config %s to %s', configJSON, configfile);
|
|
||||||
|
|
||||||
// if sqlite db file not exists, init first
|
|
||||||
initDatabase(function() {
|
|
||||||
require('../dispatch');
|
|
||||||
});
|
|
||||||
|
|
||||||
fs.writeFileSync(path.join(dataDir, 'pid'), process.pid + '');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function stop(options) {
|
function stop(options) {
|
||||||
var dataDir = options.dataDir || path.join(process.env.HOME, '.cnpmjs.org');
|
var dataDir = options.dataDir || path.join(process.env.HOME, '.cnpmjs.org');
|
||||||
var pidfile = path.join(dataDir, 'pid');
|
var pidfile = path.join(dataDir, 'pid');
|
||||||
if (fs.existsSync(pidfile)) {
|
return new Promise(function (resolve) {
|
||||||
|
if (!fs.existsSync(pidfile)) {
|
||||||
|
resolve();
|
||||||
|
return;
|
||||||
|
}
|
||||||
var pid = Number(fs.readFileSync(pidfile, 'utf8'));
|
var pid = Number(fs.readFileSync(pidfile, 'utf8'));
|
||||||
treekill(pid, function (err) {
|
treekill(pid, function (err) {
|
||||||
if (err) {
|
if (err) {
|
||||||
@@ -102,8 +109,9 @@ function stop(options) {
|
|||||||
}
|
}
|
||||||
console.log('cnpmjs.org server:%d stop', pid);
|
console.log('cnpmjs.org server:%d stop', pid);
|
||||||
fs.unlinkSync(pidfile);
|
fs.unlinkSync(pidfile);
|
||||||
|
resolve();
|
||||||
});
|
});
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function initDatabase(callback) {
|
function initDatabase(callback) {
|
||||||
|
|||||||
Reference in New Issue
Block a user