rsync失败但仅来自bash脚本

时间:2014-10-18 20:35:07

标签: 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/TMTtest.csv >> /home/james/logs/TMTUserExportLog 2>> /home/james/logs/TMTerrlog

第一个只调用生成csv文件的python脚本,将其存储在/home/james/data/TMTUsers.csv中,并输出我存储在日志文件中的一些数据。第二行rsyncs该文件到远程服务器(ssh设置为使用无密码身份验证)

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

我在本地服务器上运行Ubuntu 12.04,在远程服务器上运行14.04。

有什么想法?

1 个答案:

答案 0 :(得分:1)

问题在于此行中的&

/home/james/bin/UserList.py >> /home/james/logs/TMTUserExportLog & date >> /home/james/logs/TMTUserExportLog

&告诉shell在后台运行UserList.py,并继续而不等待它完成。这实际上有一些不良影响:首先,UserList.pydate都试图同时附加到日志,更重要的是rsync正在UserList.py之前运行有机会完成创建csv文件。这就是为什么它不会全部转移 - 转移发生时并不是全部存在。

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

#! /bin/bash 

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