#!/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'); });