【发布时间】:2019-02-22 15:08:18
【问题描述】:
我有一个以 sudo 运行的应用程序,它是使用 pm2 启动的。它必须以 sudo 运行。
在它里面我在启动时运行这个函数:
const util = require('util');
const exec = util.promisify(require('child_process').exec);
function getTmate(app) {
exec('rm /tmp/tmate.sock display -p \'#{tmate_ssh}\'').catch(err => console.log(err));
exec('tmate -S /tmp/tmate.sock display -p \'#{tmate_ssh}\'').catch(err => console.log(err)); //exception here
setTimeout(async function () {
let {stdout} = await exec('tmate -S /tmp/tmate.sock display -p \'#{tmate_ssh}\'').catch(err => console.log(err));
if (stdout.length > 8) {
console.log(stdout);
}
else {
getTmate();
}
}, 15000);
}
但我永远无法正确启动 tmate。在第二个exec 我收到以下错误:
连接服务器失败
at ChildProcess.exithandler (child_process.js:297:12) at ChildProcess.emit (events.js:197:13) at maybeClose (internal/child_process.js:984:16) at Socket.stream.socket.on (internal/child_process.js:401:11) at Socket.emit (events.js:197:13) at Pipe._handle.close (net.js:611:12) killed: false, code: 1, signal: null, cmd: "tmate -S /tmp/tmate.sock > display -p '#{tmate_ssh}'", stdout: '', stderr: 'failed to connect to server\n' }
这个想法是在启动时运行 tmate,并在 ssh 可用时立即将其发送到我的云服务器。欢迎任何其他方法。还尝试在/etc/rc.local 上运行tmate -S /tmp/tmate.sock new-session -d,但稍后我无法检索ssh 字符串(同样的错误)
如果我在终端中运行这些命令,tmate 可以正常工作:
tmate -S /tmp/tmate.sock new-session -d
tmate -S /tmp/tmate.sock display -p '#{tmate_ssh}'
【问题讨论】:
标签: node.js