永远无视killSignal

时间:2014-05-15 01:50:24

标签: node.js forever

我已成功在服务脚本中使用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=SIGHUPkillSignal SIGHUP但似乎没有任何区别;它还在发送SIGKILL

编辑:对于记录,它似乎也忽略了pidFile参数。

1 个答案:

答案 0 :(得分:2)

我有一些问题永远使用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选项。