我已经在服务脚本中成功使用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参数。

最佳答案

永久使用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选项。

07-24 16:27