我有一个以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尽快发送到我的云服务器。任何其他方法都欢迎。还尝试在tmate -S /tmp/tmate.sock new-session -d
上运行/etc/rc.local
,但稍后无法检索ssh字符串(相同的错误)
如果我在终端中运行以下命令,tmate会正常工作:
tmate -S /tmp/tmate.sock new-session -d
tmate -S /tmp/tmate.sock display -p '#{tmate_ssh}'
答案 0 :(得分:0)
采用了另一种有效的方法:
将/etc/rc.local更改为以下内容:
su nvidia -c 'tmate -S /tmp/tmate.sock new-session -d'
su nvidia -c 'tmate -S /tmp/tmate.sock wait tmate-ready'
su nvidia -c "tmate -S /tmp/tmate.sock display -p '#{tmate_ssh}' > /tmp/tmateSSH"
exit 0
后来,我刚刚检索了/ tmp / tmateSSH(如果可用)。