当前位置: 首页 > 知识库问答 >
问题:

node.js - 如何在Windows环境下使用pm2静默执行shelljs命令?

柯唯
2024-07-26

pm2执行shelljs每次都会开新终端,想要让它后台静默执行,有什么办法吗?
windows环境
比如:

//index.js
let shell = require("shelljs");
setInterval(() => {
  shell.exec("node --version");
}, 8000);

pm2 start ./index.js每隔8秒都会打开一个新终端

尝试了shell.config.silent = true;这个设置只会静默掉输出信息

希望能够静默执行shell命令,不在前台打开终端窗口。

共有1个答案

夏侯涵映
2024-07-26

在Windows环境下,shelljs库本身并不直接控制是否打开新终端窗口,因为它实际上是在Node.js的上下文中执行shell命令,并且这些命令的执行方式取决于你的系统配置和Node.js的环境。

当你使用pm2运行Node.js应用时,pm2负责管理和运行你的应用,但它并不直接控制你的Node.js代码如何执行shell命令。如果你的shell.exec()调用导致打开新的终端窗口,这通常是因为node --version命令或与之相关的系统配置导致的。

不过,就你的具体需求而言(即静默执行shell命令),你应该确保你的Node.js代码和pm2配置都不会导致打开新窗口。以下是一些建议的步骤:

  1. 确保shell.exec()是静默的:你已经提到了shell.config.silent = true;,这会确保shell命令的输出不会被打印到控制台。但是,请注意,这并不会影响命令执行时是否打开新窗口。
  2. 检查命令本身:在Windows上,node --version命令本身不应该打开新窗口。如果它这样做了,可能是因为你的系统配置或环境变量中的某些设置导致的。
  3. 使用child_process模块:虽然shelljs是一个方便的库,但你也可以考虑直接使用Node.js的child_process模块来执行shell命令。这可能会给你更多的控制权。

以下是一个使用child_process模块的示例:

const { exec } = require('child_process');

setInterval(() => {
  exec('node --version', (error, stdout, stderr) => {
    if (error) {
      console.error(`exec error: ${error}`);
      return;
    }
    // 在这里处理输出,但因为它不会打印到控制台,所以它是静默的
    console.log(`stdout: ${stdout}`);
    console.error(`stderr: ${stderr}`);
  });
}, 8000);

请注意,即使你打印了输出(如上面的示例所示),这也只会在Node.js的控制台输出中显示,而不是在新的终端窗口中。

  1. 检查pm2的配置:确保你的pm2配置没有设置任何可能导致打开新窗口的选项。虽然pm2本身不应该有这样的选项,但检查你的配置文件总是一个好习惯。
  2. 检查系统配置:如果以上步骤都没有解决问题,那么问题可能出在你的系统配置上。检查你的系统环境变量、注册表设置等,看看是否有任何与打开新窗口相关的设置。
  3. 考虑其他因素:最后,请确保没有其他外部因素(如安全软件、脚本拦截器等)可能干扰你的命令执行。
 类似资料:
  • 各位大佬,请教一个问题,我想在 nodejs 环境下运行 nvm for windows 的指令,但是在 nvm(使用go语言) 最近更新的版本里,发现新增了终端检测代码: 请问我可以绕开这个检测吗 希望在nodejs环境下可以执行nvm ls等指令,使用过child_process中的exec方法但是无法绕开go中的终端检测。

  • 问题内容: 使用Chrome Selenium-WebDriver时,它将在启动服务器时输出诊断输出: 在端口9515上启动了ChromeDriver(v2.0) 我不想看到这些消息,如何抑制它们? 我做这个 但是不会抑制诊断输出。 问题答案: 我只是这样做

  • 我试图在windows上运行的jenkins slave上使用groovy执行cmd/c echo hello。 这是我的groovy: 我可以在作业日志中看到它确实在Windows从站上运行:“在WINDOWS-SLAVE-1上运行” 但我得到一个错误:<代码>java。io。IOException:错误=2,没有这样的文件或目录 如果我尝试像这样运行linux,它可以正常工作。给我看我主人的文

  • 在Linux shell上,我们可以在一行中执行sql命令,如multiline: 但是sql脚本中的multiline在Windows中似乎不起作用。 如何在Windows中执行多行sql语句?mysql多行是否有某种? 当我使用echo并将其管道传输到时,输出的格式不是表 它只是输出 我希望得到以下输出:

  • vue-server-renderer 在默认构建时,会预先假定有一个 Node.js 环境,这使得它在其他 JavaScript 环境(如 PHP V8Js 或 Oracle Nashorn 中无法使用。在 2.5+ 版本中,我们把那些基本上与环境无关的构建,编译到 vue-server-renderer/basic.js 中,这使得它可以在上述环境中使用。 对于所有环境,必须要预先在环境中模拟

  • 本文向大家介绍Windows 环境下使用 Qt 连接 MySQL,包括了Windows 环境下使用 Qt 连接 MySQL的使用技巧和注意事项,需要的朋友参考一下 如果应用只需要连接远程数据库,那么本地不需要安装 MySQL,只需要找到 MySQL 提供的 libmysql.dll 和libmysqld.dll 两个动态连接库,把他们加入到 Qt安装目录\5.9\mingw53_32\bin\;默