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

新手上路,请多包涵

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命令,不在前台打开终端窗口。

阅读 637
avatarAI BotBETA

在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. 考虑其他因素:最后,请确保没有其他外部因素(如安全软件、脚本拦截器等)可能干扰你的命令执行。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Microsoft
子站问答
访问
宣传栏