问题描述
我正在使用带有 express js 的 ssh2 库。客户端向 express api 发送 POST 请求,然后它应该创建一些文件,然后使用 ssh2 将文件从一个目录复制到另一个目录,最终将对该文件执行另一个 shell 命令。
但是,我遇到了仅复制副本的问题。发出请求时,文件会在文件名中增加它们的编号,但是 ssh2 继续一次又一次地发送以前的文件。
Jul 21 07:13 roi00754.edi
Jul 21 07:13 roi00755.edi
Jul 21 07:13 roi00757.edi
Jul 21 07:13 roi00756.edi
Jul 21 07:13 roi00758.edi
Jul 21 07:13 roi00760.edi
Jul 21 07:13 roi00759.edi
Jul 21 07:13 roi00761.edi
ssh.on('ready',() => {
console.log('Client :: ready');
ssh.exec(
`
cp ${conf.remote_rollcreate_dir_full}${rollcreate_ord_filename} ${remote_edi_ord_dir_full}${edi_ord_filename}\n
`,(err,stream) => {
if (err) throw err;
stream.on('close',(code,signal) => {
console.log('Stream :: close :: code: ' + code + ',signal: ' + signal);
ssh.end();
})
stream.on('data',(data) => {
console.log('STDOUT: ' + data);
}).stderr.on('data',(data) => {
console.log('STDERR: ' + data);
});
stream.end(`exit\n`)
}
);
}).connect(ssh_config);
解决方法
解决方案似乎使用 .once('ready' ...
而不是 .on('ready' ...