gpt4 book ai didi

javascript - 通过 pm2 从 nodejs 应用程序运行终端命令

转载 作者:行者123 更新时间:2023-12-03 00:43:11 24 4
gpt4 key购买 nike

我有一个express server运行于 pm2只有一条路线:

app.get('/', (req, res) => {
res.sendFile(__dirname + '/index.html);
}

以及一个监听“open youtube”的 socket.io 事件处理程序(来自之前发送的 index.html )

io.on('connection', function(socket){
socket.on('open youtube', function() {
exec('start chrome youtube.com'); //yes ik, this is a windows-only solution
console.log('Opening youtube...');
});
});

虽然一切正常,但当在express服务器上处理emit时,唯一有效的部分是 console.log()而不是 exec() (const exec = require('child_process').exec;)

什么原因pm2不允许我运行 cmd命令和/或如何运行 cmd来自 nodejs 的命令应用程序在 pm2 下运行?

编辑:

当我使用 npm start 运行服务器而不是作为 pm2 进程运行服务器时,它会使用 youtube.com 打开一个新选项卡(如预期)

编辑2:

出于某种原因,在我运行 pm2 reload Ecosystem.config.js 和 pm2 save 后,它确实起作用了。我对 Ecosystem.config.js 所做的唯一更改是将 exec_mode 更改为 exec_mode: 'cluster' 而不是默认值 fork。
不知道是不是这个原因。

最佳答案

exec(String) 是一个异步函数,您可能有一个您不知道的错误,请传递如下回调:

exec('start chrome youtube.com', (error, stdout, stderr) => {
if (error) {
// handle error
} else {
// handle success
}
});

您也可以使用同步版本

try {
let res = execSync('start chrome youtube.com');
} catch(err){
// handle error
return;
}
// handle success

关于javascript - 通过 pm2 从 nodejs 应用程序运行终端命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53353200/

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