Javascript 如何通过应用程序代码(即NodeJS)将cronjob条目动态添加到基于ubuntu的容器中?
我有一个基于微服务架构的nodejs应用程序,我计划通过容器化在kubernetes集群上运行它。 我需要这个应用程序从数据库中查询所有cron条目,并将这些cron条目添加到运行我的应用程序的同一服务器上的crontab中 当我查询所有cron条目并获得cron作业列表时,如下所示: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 试一试 它很容
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);
});