首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Node环境执行shell命令行exec

Node环境执行shell命令行exec

作者头像
biaoblog.cn 个人博客
发布2025-05-21 09:19:23
发布2025-05-21 09:19:23
1580
举报

前景:

之前使用Github action来备份数据,每次都需要使用ssh 登录服务器,

但是有时候会登录超时(因为git的ip地址是美国的,我的服务器又是国内的,服务器会报警),导致备份数据失败

所以思考了一下,能不能使用node api来执行备份数据的操作??

这样的话node api的上下文就是自己的服务器 也不需要ssh这种登录的东西了!

简直快捷又方便

本质就是通过node来执行shell命令行

直接开搞

主要是使用child_process的中的exec

代码语言:javascript
复制
const { exec } = require("child_process");
const { promisify } = require("util");
const execAsync = promisify(exec);

promisify是当node中一些标准的call方法封装成异步函数的 方便去awiat

比如fs.readFile(),exec() 等等标准node自带方法 注意:是标准格式,自己写也要严重遵循node的方法输出和输入标准,

不建议自己写方法然后通过promisify去套,不如自己套promise去套

完整代码:

代码语言:javascript
复制
const { exec } = require("child_process");
const { promisify } = require("util");
const execAsync = promisify(exec);

router.post("/backup", async (ctx) => {

  const dbUser = `xxxxx`;
  const dbPass = `xxxxxx`;
  const command = `cd /xxx/xxx/mongodb/bin/ && ./mongodump -h 127.0.0.1:27017 -d xx-o xxx -u "${dbUser}" -p "${dbPass}"`;

  try {
    const { stdout, stderr } = await execAsync(command);
    ctx.body = {
      success: true,
      message: "数据备份成功",
      output: stdout,
      warning: stderr || null,
    };
  } catch (error) {
    ctx.status = 500;
    ctx.body = {
      success: false,
      message: "数据备份失败",
      error: error.message,
    };
  }
});

注意:这里的await execAsync(command); 其实不是等待数据备份完成,而是等待命令执行完成,具体的相关信息在stdout和stderr 中

它并不会“知道”你这个命令是否 备份成功,它只是执行你拼接的 mongodump 命令,并返回执行过程中的标准输出 (stdout) 和标准错误 (stderr)。如果命令执行过程中出现错误(例如 mongodump 执行失败),execAsync 会抛出异常(因为 exec 遵循的是 Node.js 的标准回调格式:(error, stdout, stderr),而 promisify 会自动把 error 转成 Promise reject)。

这样我们就实现了通过调用我们自己的服务来备份数据的操作了

具体的mongodb备份的文章可以参考:https://cloud.tencent.com/developer/article/2070889

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=3ojgb8gypwcg0

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前景:
  • 完整代码:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档