2014-10-18 156 views
0

我有一个简单的双行bash脚本,它将csv文件(webapp中的用户列表)复制到远程服务器。rsync失败,但只在bash脚本内

#! /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%的文件(大约800kb文件的100kb)和它似乎每次都停在不同的地方。没有错误输出(正如你所看到的,我重定向到一个日志文件)。但是当我从命令行运行完全相同的rsync命令时,它完美地工作(整个文件被传输)。我尝试使用rcp而不是rsync,同样的事情发生。

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

任何想法??

回答

1

的问题是在这条线的&

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

&讲述到在后台运行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 
+0

谢谢 - 那做到了。我的愚蠢错误 – jalibras 2014-10-19 08:15:25