我已经在服务脚本中成功使用forever
一段时间了。我正在尝试部署零停机时间配置,而对我来说唯一缺少的部分是forever
似乎忽略了--killSignal
参数。我的服务脚本的相关部分是:daemon --user=$user \ $forever --killSignal=SIGHUP -p $forever_dir --uid $uid --pidFile $pidfile -l $logfile \ -a --sourceDir $SOURCE_DIR start $SOURCE_FILE &
有没有人遇到过类似的问题?我查看了永久的代码并阅读了文档,看来其他人正在成功使用它。我已经尝试过将killSignal
开关设置为killSignal=SIGHUP
和killSignal SIGHUP
,但似乎都没有任何区别。它仍在发送SIGKILL
。
编辑:为了记录,它似乎也忽略了pidFile
参数。
最佳答案
永久使用killsignal和killttl选项时,我遇到了一些问题,此外,还按需要重新启动了脚本。我最终使用forever-monitor编写了自己的主管脚本:
var forever = require('forever-monitor'),
child = createChild();
process.on('SIGUSR2', function restart() {
// This signal is used to restart gracefully.
var newChild = createChild();
child.stop();
child = newChild;
});
process.on('SIGTERM', function stop() {
child.stop();
child.on('stop', function () {
process.exit();
});
});
function createChild() {
console.log('Running a new instance');
var child = new (forever.Monitor)(__dirname + '/main.js', {
killTTL : 50000,
killSignal : 'SIGTERM'
});
child.on('stop', function () {
console.log('Old instance has stopped');
});
child.on('exit:code', console.log.bind(console, 'Old instance has exitted with code'))
child.on('error', function (error) {
console.error(error.stack || error);
});
return child.start();
}
您可以以此为例。您也可以在此处添加pidFile选项。