2012-02-15 2 views

답변

3

그것은 전적으로 프로그램이하고있다하지만이 같은 것을 말할 것에 따라 달라집니다 :

나는 현재 내 코드에서 이것을 사용/O 작업 (예 : 파일 읽기, HTTP 요청/응답 등)은 완료되어야하지만 새 작업은 시작할 수 없습니다. 따라서 셧다운 핸들러는 새로운 작업 (예 : 포트 리스너 바인딩 해제, 새 fs 호출 방지 등)을 시작할 가능성을 방지하고 현재 실행중인 핸들러가 완료 될 때까지 실행 한 다음 프로세스를 종료해야합니다.

[편집] 물론 응용 프로그램이 위의 우려 사항에 신경 쓰지 않는다면 실제로 아무 것도 할 수 없습니다. 프로세스가 모두 종료되면 열려있는 파일/소켓 핸들이 자동으로 닫혀 누출 된 리소스에 문제가 없습니다.

+0

나는 내 신호를 외부 신호와 관련하여 더욱 구체적으로 편집했다. 답변 해 주셔서 감사합니다. – EhevuTov

+0

앱 종료를 지속시키는 데이터베이스에 작업을 배치하는 일정 목록과 같은 작업 처리기와 같은 것들은 어떻습니까? 그래서 응용 프로그램이 작업 스택을 다시 시작할 때? – mjwrazor

1

희망이 템플릿이 도움이됩니다. 나는 Simon Holmes의 책 "Getting Getting Mean"에서 대부분을 얻었습니다. 신용은 그에게 간다.

var mongoose = require('mongoose'); 
var gracefulShutdown; 
var dbURI = 'mongodb://localhost/xxx'; 
if (process.env.NODE_ENV === 'production') { 
    dbURI = process.env.MONGOLAB_URI; 
} 

mongoose.connect(dbURI); 

// CONNECTION EVENTS 
mongoose.connection.on('connected', function() { 
    console.log('Mongoose connected to ' + dbURI); 
}); 
mongoose.connection.on('error',function (err) { 
    console.log('Mongoose connection error: ' + err); 
}); 
mongoose.connection.on('disconnected', function() { 
    console.log('Mongoose disconnected'); 
}); 

// CAPTURE APP TERMINATION/RESTART EVENTS 
// To be called when process is restarted or terminated 
gracefulShutdown = function (msg, callback) { 
    mongoose.connection.close(function() { 
    console.log('Mongoose disconnected through ' + msg); 
    callback(); 
    }); 
}; 
// For nodemon restarts 
process.once('SIGUSR2', function() { 
    gracefulShutdown('nodemon restart', function() { 
    process.kill(process.pid, 'SIGUSR2'); 
    }); 
}); 
// For app termination 
process.on('SIGINT', function() { 
    gracefulShutdown('app termination', function() { 
    process.exit(0); 
    }); 
}); 
// For Heroku app termination 
process.on('SIGTERM', function() { 
    gracefulShutdown('Heroku app termination', function() { 
    process.exit(0); 
    }); 
}); 
// TODO : For Modulus app termination 

// BRING IN YOUR SCHEMAS & MODELS. 
require('./yyy'); 
관련 문제