gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 23:22:52 25 4
gpt4 key购买 nike

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

当我查询我所有的 cron 条目时,我得到一个 cron 作业列表,如下所示:

1 * * * * root node /home/project/app.js 103
1 * * * * root node /home/project/app.js 104
1 * * * * root node /home/project/app.js 105

当我执行数据库查询以列出作业时,我需要将这些 cron 作业动态添加到服务器上(这里的服务器是我的应用程序容器,它基于 ubuntu 图像)。我如何将这些 cron 作业从我的应用程序添加到我的服务器?是否有直接的解决方案,或者可以使用 NodeJS 中的任何库来完成?

我查看了 NodeJS 的 shelljs 库,发现它有点复杂,所以无法尝试。任何帮助表示赞赏。

最佳答案

我不建议为一个应用程序设置多个 cron 条目 - 因为如果您有多个应用程序的数千个条目,它会变得非常大,您自己添加一些将变得非常困难。

当所需的执行时间永远不变时,只需在您的 Node 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!"); });

注意:代码未经测试或者,使用 Promise(由 OP 测试)

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);
});

要解析 crontab 文件,您可以使用 https://github.com/harrisiirak/cron-parser

关于javascript - 如何通过我的应用程序代码(即 NodeJS)将 cronjob 条目动态添加到基于 ubuntu 的容器中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50129640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com