Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
rsync失败,但仅来自bash脚本_Bash_Rsync - Fatal编程技术网

rsync失败,但仅来自bash脚本

rsync失败,但仅来自bash脚本,bash,rsync,Bash,Rsync,我有一个简单的两行bash脚本,它将csv文件(来自webapp的用户列表)复制到远程服务器 #! /bin/bash /home/james/bin/UserList.py >> /home/james/logs/TMTUserExportLog & date >> /home/james/logs/TMTUserExportLog rsync /home/james/data/TMTUsers.csv myserver.com:~/data/TMTtes

我有一个简单的两行bash脚本,它将csv文件(来自webapp的用户列表)复制到远程服务器

#! /bin/bash 

/home/james/bin/UserList.py >> /home/james/logs/TMTUserExportLog & date >> /home/james/logs/TMTUserExportLog 
rsync /home/james/data/TMTUsers.csv myserver.com:~/data/TMTtest.csv >> /home/james/logs/TMTUserExportLog 2>> /home/james/logs/TMTerrlog
第一个只是调用一个python脚本来生成csv文件,将其存储在/home/james/data/TMTUsers.csv中,并输出一些我存储在日志文件中的数据。第二行将文件发送到远程服务器(ssh设置为使用无密码身份验证)

现在有一件奇怪的事。当我从命令行以交互方式或作为cron作业运行此脚本时,python脚本工作正常并生成正确的文件,但rsync仅传输文件的10-15%(800kb文件中约100kb),每次似乎都在不同的点停止。没有错误输出(如您所见,我重定向到日志文件)。但是当我从命令行运行完全相同的rsync命令时,它工作得非常好(整个文件都被传输了)。我尝试使用rcp而不是rsync,同样的情况也发生了

我在本地服务器上运行Ubuntu12.04,在远程服务器上运行14.04

#! /bin/bash 

/home/james/bin/UserList.py >> /home/james/logs/TMTUserExportLog & date >> /home/james/logs/TMTUserExportLog 
rsync /home/james/data/TMTUsers.csv myserver.com:~/data/TMTtest.csv >> /home/james/logs/TMTUserExportLog 2>> /home/james/logs/TMTerrlog

有什么想法吗

问题在于该行中的

/home/james/bin/UserList.py >> /home/james/logs/TMTUserExportLog & date >> /home/james/logs/TMTUserExportLog
&
告诉shell在后台运行
UserList.py
,并在不等待它完成的情况下继续。这实际上有两个坏影响:首先,
UserList.py
date
都试图同时附加到日志,更重要的是,
rsync
UserList.py
有机会完成创建csv文件之前运行。这就是为什么它不是全部被转移的原因——当转移发生时,它不是全部存在的

修复很简单,只需丢失
&
,并以可预测的顺序分别运行每个命令(注意,我假设日期应该是日志中的第一个):


谢谢,就是这样。我犯了一个愚蠢的错误