我正在使用rsync
module与节点v0.10.22
。当从Node运行时,Rsync退出代码23
(由于错误导致的部分传输),但是当从与崩溃的节点进程完全相同的shell运行时成功。
以下是我正在使用的代码:
var r = new Rsync()
.flags('a')
.include('*.png')
.exclude('*')
.source(path.join('source/*'))
.destination('target')
.execute(function (err, code, cmd) {
if (err && code === 23) {
console.log('Exited with 23');
console.log(cmd);
}
});
记录的cmd
如下:
rsync -a --include="*.png" --exclude="*" source/* target
当Node在同一个shell中崩溃后执行那个确切的命令时,命令返回0
(没有错误,它有效)。
我查看了rsync.js
产生命令的地方:
// Execute the command as a child process
var cmdProc = spawn(this.executable(), this.args(), { stdio: 'pipe' });
this.executable()
返回'rsync'
。 this.args()
会返回['-a', '--include="*.png"', '--exclude="*", 'source/*', 'target/']
。
这里发生了什么?为什么从Node运行时获得不同的退出代码,而不是在运行Node的同一个shell中运行?
编辑:我将每个目录的权限设置为777
,我仍然遇到同样的错误。
答案 0 :(得分:0)
源中的glob未展开,因此rsync尝试在*
目录中查找名为source
的文件。将来源更改为source/
。