【问题标题】:rsync failing but only from within bash scriptrsync 失败,但仅来自 bash 脚本
【发布时间】:2014-10-18 20:35:07
【问题描述】:

我有一个简单的两行 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 并输出一些我存储在日志文件中的数据。第二行 rsync 将该文件同步到远程服务器(ssh 设置为使用无密码身份验证)

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

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

有什么想法吗??

【问题讨论】:

    标签: bash rsync


    【解决方案1】:

    问题在于这一行中的&

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

    & 告诉 shell 在后台运行 UserList.py,并继续运行而不等待它完成。这实际上有几个不好的影响:一方面,UserList.pydate 都试图同时附加到日志,更重要的是 rsyncUserList.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
    

    【讨论】:

    • 谢谢 - 做到了。我的愚蠢错误
    猜你喜欢
    • 2015-07-27
    • 1970-01-01
    • 2012-06-25
    • 2014-03-13
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    • 2021-05-01
    相关资源
    最近更新 更多