![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Hejka, mam dziwny problem. Odpalam pewien skrypcik przez babel-node taka oto komenda:
Kod /var/www/html/mediatel/vendor/mediatel/mapping/node_modules/.bin/babel-node /var/www/html/mediatel/vendor/mediatel/mapping/bin/job-daemon.js --redisHost=redis Potem sprawdzam procesy jakie sa odpalone w systemie i mam dwa procesy na to jedno wywolanie, oto one: Cytat root 12171 1.5 0.1 658592 14452 ? Sl+ 15:27 0:00 node /var/www/html/mediatel/vendor/mediatel/mapping/node_modules/.bin/babel-node /var/www/html/mediatel/vendor/mediatel/mapping/bin/job-daemon.js --redisHost=redis root 12173 74.0 0.9 853912 74632 ? Sl+ 15:27 0:01 node /var/www/html/mediatel/vendor/mediatel/mapping/node_modules/babel-cli/lib/_babel-node /var/www/html/mediatel/vendor/mediatel/mapping/bin/job-daemon.js --redisHost=redis Jak widzicie jeden to /.bin/babel-node a drugi to babel-cli/lib/_babel-node Skad sie bierze ten drugi? O to tresc skryptu: Kod "use strict"; import pg from "pg"; import reacher from "reacher"; import redis from "redis"; import winston from "winston"; import yargs from "yargs"; import layerDeleter from "../js/daemon/layer_deleter"; import statePersister from "../js/state_persister"; const waitForJobSeconds = 10; const logger = new winston.Logger({ level: yargs.argv.logLevel || "info", transports: [ new (winston.transports.Console)({timestamp: true}) ] }); let stop = false; process.on("SIGTERM", () => { logger.debug( `Caught SIGTERM. Shutting-down in up to ${waitForJobSeconds} seconds....` ); stop = true; }); pg.connect( "postgres://mediatel:m4ppIn%40@postgis.mediatel.co.uk/regional", (err, dbConn, done) => { if (err) { logger.error(err); done(); return; } const shutdown = function shutdown() { done(); logger.info("All done."); }; //noinspection Eslint const commandBus = reacher.Reacher(); const persister = statePersister.new(layerDeleter.new(dbConn, logger)); const messageBus = redis.createClient({ host: yargs.argv.redisHost || "127.0.0.1" }); // Register command handlers commandBus.handle( "PersistState", function handlePersistStateCommand(args) { logger.debug(`Persisting state for map ${args.mapId}.`); persister.persistState(args.mapId, args.state); } ); messageBus.on("error", (er) => logger.error(er)); const waitForJob = function waitForJob() { const dispatchJob = function dispatchJob(err, job) { if (err) { logger.error(err); } if (job) { let {job: name, data} = JSON.parse(job); logger.info(`Dispatching job ${name}`); commandBus.request(name, data); // Now the job has been processed we can drop it completely. messageBus.lrem("mapping_job_in_progress", 0, job); } if (stop) { shutdown(); return; } waitForJob(); }; messageBus.brpoplpush( "mapping_jobs", "mapping_job_in_progress", waitForJobSeconds, dispatchJob ); logger.debug("Waiting for a job...."); }; waitForJob(); } ); Skrypt ten sprawdza czy sa jakies nowe rzeczy w redis i jakby co reaguje na nie. Skrypt ten tez powinien sie wylaczyc gdy otrzyma signal TERM. Niestety tak sie nie dzieje. Znaczy kod Kod process.on("SIGTERM", () => { logger.debug( `Caught SIGTERM. Shutting-down in up to ${waitForJobSeconds} seconds....` ); stop = true; }); Lapie ten sygnal a nastepnie wykonuje sie funkcja shutdown() i teoretycznie skryp przestaje dzialac, jednak w tle nadal dziala ten drugi skrypt i robi swoje. Gdy probuje wyslac sygnal TERM do tego drugiego procesu to niby tez otrzymuje sygnal ale jakby sie zawiesza. Ktos sie spotkal z tym, ze node tworzy dwa procesy na jedno wykonanie i czemu tak sie dzieje? -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 11:47 |