Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Node环境执行shell命令行exec

Node环境执行shell命令行exec

作者头像
biaoblog.cn 个人博客
发布于 2025-05-21 01:19:23
发布于 2025-05-21 01:19:23
9300
代码可运行
举报
运行总次数:0
代码可运行

前景:

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

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

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

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

简直快捷又方便

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

直接开搞

主要是使用child_process的中的exec

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
util.promisify 的那些事儿
util.promisify是在node.js 8.x版本中新增的一个工具,用于将老式的Error first callback转换为Promise对象,让老项目改造变得更为轻松。
贾顺名
2019/12/09
9730
Vue + Node.js 从 0 到 1 实现自动化部署工具
最近写了一个自动化部署的 npm 包 zuo-deploy[1],只需点击一个按钮,就可以执行服务器部署脚本,完成功能更新迭代。客户端使用 Vue + ElementUI,服务 koa + socket + koa-session 等。基础功能代码 300 行不到,已开源在 github。zuoxiaobai/zuo-deploy 欢迎 Star、Fork。这里介绍下具体实现细节、思路。
@超人
2022/04/14
1.8K0
Vue + Node.js 从 0 到 1 实现自动化部署工具
Vue反编译dist包到源码
最近由于公司老项目上的问题,由于项目很老,之前交接的源码包中缺少了很大一部分模块,但是现在线上的环境和dist包是正常运行的,领导希望能够手动将这部分补全,由于前期项目的不规范,缺少接口文档以及原型图,因此无法知道到底该如何补全,因此,我想着能不能通过dist包去反编译源码包呢,经过多方面探索发现是可行的,但是只能编译出vue文件,但是也满足基本需要了。
winty
2024/06/14
1.2K0
Vue反编译dist包到源码
Node.js + Git Hooks + Slack:前端项目构建异常自动提醒
Git Hooks 是 Git 提供的一种机制,允许开发者在特定的事件发生时触发自定义脚本,这些事件包括代码提交、推送等。通过使用 Git Hooks,我们可以在代码提交之前或之后执行一些自动化任务,例如代码格式检查、单元测试、构建验证等。
三掌柜
2025/07/24
1120
Node.js + Git Hooks + Slack:前端项目构建异常自动提醒
关于node代码如何丝滑执行多条命令行这件事
首先,node使用命令行依赖于child_process,这个是node原生支持的,我用的最多就是exec。
爱吃大橘
2022/12/27
1.3K0
Node.js 命令行程序开发教程
一种编程语言是否易用,很大程度上,取决于开发命令行程序的能力。 Node.js 作为目前最热门的开发工具之一,怎样使用它开发命令行程序,是 Web 开发者应该掌握的技能。 最近,Npm的网志有一组系列
ruanyf
2018/04/12
1.3K0
Node.js 命令行程序开发教程
深入了解 Node 的多进程服务
我们现在已经知道了Node是单线程运行的,这表示潜在的错误有可能导致线程崩溃,然后进程也会随着退出,无法做到企业追求的稳定性;另一方面,单进程也无法充分多核CPU,这是对硬件本身的浪费。Node社区本身也意识到了这一问题,于是从0.1版本就提供了child_process模块,用来提供多进程的支持。
用户8921923
2022/10/24
8480
前端脚手架开发需要了解哪些技术点
上篇文章大致分享了遇到的一个iframe问题,及iframe的常用属性,有些属性是我们不常用但是必须了解的。
terrence386
2022/07/14
5250
node.js 中的进程和线程工作原理
进程是对正在运行中的程序的一个抽象,是系统进行资源分配和调度的基本单位,操作系统的其他所有内容都是围绕着进程展开的
ACK
2024/09/18
2710
node.js 中的进程和线程工作原理
详解Nodejs中命令执行原型链污染等漏洞
Nodejs特例 大小写转换函数 toUpperCase(): 将小写转换为大写的函数 toLowerCase(): 将大写转换为小写的函数 注意: 前者可以将ı转换为I, 将ſ转为为S 后者可以将İ转换为i, 将K转换为k 数组 a && b && a.length===b.length && a!==b && md5(a+flag)===md5(b+flag) 通过调试: 可以传入数组绕过。 命令执行 eval eval() 函数可计算某个字符串,并执行其中的的 JavaScr
FB客服
2023/04/26
2.2K0
详解Nodejs中命令执行原型链污染等漏洞
Node.js进阶之进程与线程
进程与线程在服务端研发中是一个非常重要的概念,如果您在学习的时候对这一块感到混乱或者不是太理解,可以阅读下本篇内容,本篇在介绍进程和线程的概念之外,列举了很多 Demo 希望能从实战角度帮助您更好的去理解。
五月君
2019/07/12
1.3K0
Node.js进阶之进程与线程
Nodejs进程间通信
一.场景 Node运行在单线程下,但这并不意味着无法利用多核/多机下多进程的优势 事实上,Node最初从设计上就考虑了分布式网络场景: Node is a single-threaded, single-process system which enforces shared-nothing design with OS process boundaries. It has rather good libraries for networking. I believe this to be a basis
ayqy贾杰
2019/06/12
3.3K0
理解NodeJS多进程
一次面试中,我提到自己用过pm2,面试接着问:「那你知道pm2父子进程通信方式吗」。我大概听说pm2有cluster模式,但不清楚父子进程如何通信。面试结束后把NodeJS的多进程重新整理了一下。
coder2028
2022/10/10
1.3K0
nodejs 写 bash 脚本终极方案!
最近在学习bash脚本语法,但是如果对bash语法不是熟手的话,感觉非常容易出错,比如说:显示未定义的变量shell中变量没有定义,仍然是可以使用的,但是它的结果可能不是你所预期的。举个例子:
ConardLi
2021/09/08
2.7K0
nodejs 写 bash 脚本终极方案!
Node.js 多进程(上)
我们都知道 Node.js 是以单线程的模式运行的,但它使用的是事件驱动来处理并发,这样有助于我们在多核 cpu 的系统上创建多个子进程,从而提高性能。
陈不成i
2021/07/13
7900
Node.js 中 child_procss 模块
Node.js 的单线程模型给了它无数的赞美,也带给它无数的诟病。单线程模型,让开发者远离了线程调度的复杂性,使用事件驱动也能开发出一个高并发的服务器;同样也是因为单线程,让CPU密集型计算应用完全不适用。
李振
2021/11/26
8250
NodeJS运行Shell的方式及搭建运维平台
它比原生的child_process的兼容性更好,使用更灵活,这个插件的使用率很高。
码客说
2021/04/13
9.7K0
Week4-脚手架命令注册和执行过程开发
本节的主要内容为添加第一个comman操作:‘init’,并在commands文件夹下创建新的init包
六个周
2022/10/28
1K0
Week4-脚手架命令注册和执行过程开发
electron实战项目-命令行终端[手把手教学]
Electron很出名,很多人可能了解过,知道它是用来开发桌面端的应用,但是一直没有在项目中实践过,缺乏练手的实践项目。
OBKoro1
2021/01/13
2.5K0
Node.js多进程
使用子进程的执行命令,缓存子进程的输出。并将子进程的输出以回调函数参数的形式进行返回
mySoul
2018/07/30
7020
相关推荐
util.promisify 的那些事儿
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验