2014-10-18 172 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