Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何通过应用程序代码(即NodeJS)将cronjob条目动态添加到基于ubuntu的容器中?_Javascript_Node.js_Docker_Cron_Containers - Fatal编程技术网

Javascript 如何通过应用程序代码(即NodeJS)将cronjob条目动态添加到基于ubuntu的容器中?

Javascript 如何通过应用程序代码(即NodeJS)将cronjob条目动态添加到基于ubuntu的容器中?,javascript,node.js,docker,cron,containers,Javascript,Node.js,Docker,Cron,Containers,我有一个基于微服务架构的nodejs应用程序,我计划通过容器化在kubernetes集群上运行它。 我需要这个应用程序从数据库中查询所有cron条目,并将这些cron条目添加到运行我的应用程序的同一服务器上的crontab中 当我查询所有cron条目并获得cron作业列表时,如下所示: 1****根节点/home/project/app.js 103 1****根节点/home/project/app.js 104 1****根节点/home/project/app.js 105 试一试 它很容

我有一个基于微服务架构的nodejs应用程序,我计划通过容器化在kubernetes集群上运行它。 我需要这个应用程序从数据库中查询所有cron条目,并将这些cron条目添加到运行我的应用程序的同一服务器上的crontab中

当我查询所有cron条目并获得cron作业列表时,如下所示:
1****根节点/home/project/app.js 103
1****根节点/home/project/app.js 104
1****根节点/home/project/app.js 105
试一试


它很容易启动,并且有很多功能来实现复杂的作业。

我不建议在一个应用程序中使用多个cron条目,因为如果您有多个应用程序的数千个条目,它将变得非常大,并且您自己添加一些条目将变得非常困难

当所需的执行时间从未更改时,只需在节点js根文件目录中创建一个“cron.sh”文件,并将所有命令写入其中

crontab-e:
1****root/home/project/cron.sh>/home/project/cron.log

/home/project/cron.sh的内容:

#!/bin/bash
# Change directory:
cd /home/project/
# Run the script with all parameters
node ./app.js 103
node ./app.js 104
node ./app.js 105
不要忘记
chmod 0770
cron.sh以便能够对其进行写入,并且,由于您似乎以root用户身份运行此cron,因此阻止其他用户以root用户身份执行命令

/e:要直接更改crontab文件,可以使用以下shell代码首次导出、修改并再次导入作业:

const exec = require('child_process').exec;
const fs  = require('fs');
// Read content of file
function ReadCronFile(cb) {
    exec("crontab -l", function(err, stdout, stderr) {
        cb(stdout);
    });
}
// Write a crontab file
function WriteCronFile(data, cb) {
    fs.writeFile("tmp.txt", data, function(err) {
        exec("crontab tmp.txt", function(err, stdout, stderr) {
            fs.unlink("tmp.txt", function(err) {
                cb();
            });
        });
    });
}
// Example usage
ReadCronFile(function(data) { console.log(data); });
WriteCronFile("...", function() { console.log("Done!"); });
注意:代码未经测试 或者,承诺(由OP测试)


对于分析crontab文件,您可以使用

Sidenote:这要求注册cron的脚本始终运行,例如,将其安装为守护进程。@tinosys-我提到的cron时间是一个示例,这些作业可以是任何时间和不同的脚本。我的需求是将我从中的数据库查询的这些cron作业添加到服务器crontab中。问题是如何通过NodeJS应用程序将cron条目发布到服务器crontab;上面的代码未经测试,但应在theory@tinosys-我会先试试,然后再回来。感谢you@tinosys-谢谢,成功了,我使用了promise样式并使用fs.unlink而不是fs.removeFile.No problem;用您所做的更正更新了答案;如果它回答了您的问题,请将其标记为anwer。顺便说一下,我的用户名是“tionsys”,但我的名字是Tino,你说得对:D
const exec = require('child_process').exec;
const fs  = require('fs');
// Read content of file
function ReadCronFile() {
    return new Promise(function(resolve, reject) {
        exec("crontab -l", function(err, stdout, stderr) {
            if(err) return reject(err);
            else return resolve(stdout);
        });
    });
}
// Write a crontab file
function WriteCronFile(data) {
    fs.writeFile("tmp.txt", data, function(err) {
        if(err) return reject(err);
        exec("crontab tmp.txt", function(err, stdout, stderr) {
            fs.unlink("tmp.txt", function(err) {
                if(err) return reject(err);
                else return resolve();
            });
        });
    });
}
// Example usage
ReadCronFile().then(function(data) {
    console.log(data);
}).catch(function(err) {
    console.log(err);
});
WriteCronFile("...").then(function() {
    console.log("Done!");
}).catch(function(err) {
    console.log(err);
});