61 lines
2.0 KiB
JavaScript
Executable File
61 lines
2.0 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
|
|
const http = require('http');
|
|
|
|
// Конфигурация приложения
|
|
let debugMode = false;
|
|
|
|
// Создаем HTTP-сервер
|
|
const server = http.createServer((req, res) => {
|
|
res.end(`Debug mode: ${debugMode ? 'ON' : 'OFF'}`);
|
|
});
|
|
|
|
// Graceful shutdown
|
|
const gracefulShutdown = (signal) => {
|
|
console.log(`\nReceived ${signal}. Closing server...`);
|
|
|
|
server.close(() => {
|
|
console.log('All connections closed. Exiting.');
|
|
process.exit(0);
|
|
});
|
|
|
|
setTimeout(() => {
|
|
console.error('Forcing shutdown after 5 seconds!');
|
|
process.exit(1);
|
|
}, 5000);
|
|
};
|
|
|
|
// Обработчики сигналов
|
|
process.on('SIGINT', () => gracefulShutdown('SIGINT (Ctrl+C)')); // Terminal interrupt
|
|
process.on('SIGTERM', () => gracefulShutdown('SIGTERM')); // Default kill signal
|
|
process.on('SIGHUP', () => { // Hangup
|
|
console.log('\nReceived SIGHUP. Reloading configuration...');
|
|
// Здесь можно перечитать конфиги
|
|
});
|
|
|
|
// Пользовательские сигналы
|
|
// Выключен для демонстрации поведения встроенного дебаггера
|
|
// теперь при перехвате SIGUSR1, дебаггер не будет активирован
|
|
/*
|
|
process.on('SIGUSR1', () => { // User-defined 1
|
|
debugMode = true;
|
|
console.log('\nDebug mode activated (SIGUSR1)');
|
|
});
|
|
*/
|
|
|
|
process.on('SIGUSR2', () => { // User-defined 2
|
|
debugMode = false;
|
|
console.log('\nDebug mode deactivated (SIGUSR2)');
|
|
});
|
|
|
|
// Запуск сервера
|
|
server.listen(3003, () => {
|
|
const pid = process.pid;
|
|
console.log(`Server started. PID: ${pid}`);
|
|
console.log('Test commands:');
|
|
console.log(` Kill with SIGTERM: kill -TERM ${pid}`);
|
|
console.log(` Toggle debug mode: kill -USR1 ${pid} / kill -USR2 ${pid}`);
|
|
console.log(` Force kill: kill -9 ${pid}`);
|
|
console.log('Endpoint: curl http://localhost:3003');
|
|
});
|