Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> babel-node tworzy dwa procesy
nospor
post 19.10.2016, 16:33:27
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

Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 11:47