javascript 子进程未结束上次运行的子进程的Cron作业

efzxgjgh  于 2022-12-17  发布在  Java
关注(0)|答案(1)|浏览(92)

我有这个代码:

let { exec } = require("child_process");
const job = new cron.schedule("*/2 * * * *", function () {
        console.log("Cron job Twitter API started");

        exec(
            "node /home/user/Raid/src/sub2/index.js",
            function (error, stdout, stderr) {
                if (error) {
                    console.log(error.stack);
                    console.log("Error code: " + error.code);
                    console.log("Signal received: " + error.signal);
                }
                console.log("Child Process STDOUT: " + stdout);
                console.log("Child Process STDERR: " + stderr);
            }
        );
    });

问题是,每2分钟子进程启动一次,但没有终止。我如何正确地终止子进程?我的服务器内存增长非常快,每小时强制重新启动一次。
我也尝试了这个实现,但与此我没有得到一个错误,但代码不工作。

let { exec } = require("child_process");
const job = new cron.schedule("*/2 * * * *", function () {

                if(exec){
                   exec.kill(0);
                }
        console.log("Cron job Twitter API started");

        exec(
            "node /home/user/Raid/src/sub2/index.js",
            function (error, stdout, stderr) {
                if (error) {
                    console.log(error.stack);
                    console.log("Error code: " + error.code);
                    console.log("Signal received: " + error.signal);
                }
                console.log("Child Process STDOUT: " + stdout);
                console.log("Child Process STDERR: " + stderr);
            }
        );
    });

问题是,每2分钟子进程启动一次,但没有终止。我如何正确地终止子进程?我的服务器内存增长非常快,每小时强制重新启动一次。

wkyowqbh

wkyowqbh1#

exec()返回一个子对象,因此您可以这样做:

let childProcess = '0';
    const job = new cron.schedule("*/2 * * * *", function () {
        if (childProcess != '0') {
            childProcess.kill(0);
        }
        console.log("Cron job Twitter API started");

        childProcess = exec(
            "node /home/eliasxxx97/Raid/src/sub2/index.js",
            function (error, stdout, stderr) {
                if (error) {
                    console.log(error.stack);
                    console.log("Error code: " + error.code);
                    console.log("Signal received: " + error.signal);
                }
                console.log("Child Process STDOUT: " + stdout);
                console.log("Child Process STDERR: " + stderr);
            }
        );
    });

相关问题