0

我有一个脚本,它应该使用 rsync 将文件从 Linux 机器拉到我的 Windows 机器。我将它设计为 Windows 服务,并且该位似乎工作正常。rsync 和 ssh 可执行文件启动,连接到 Linux 机器,使用密钥进行身份验证,但不复制任何文件。这是脚本的核心,不包括大多数 Windows 服务内容。

import subprocess
RSYNCPULL = '''"C:\\Program Files\\cwRsync\\bin\\rsync.exe" --remove-source-files
           --no-motd -e "\'C:\\Program Files\\cwRsync\\bin\\ssh.exe\'"
           user@IP:/var/log/* /cygdrive/c/logs/'''

class LogCopy( win32serviceutil.ServiceFramework ):
   #various functions for starting/stopping the service
    def sleep( self, sec ):
        win32api.Sleep( sec*1000, True )
    def start( self ):
        self.runflag = True
        while self.runflag:
            subprocess.call( RSYNCPULL )
            self.sleep( 10 )  

if __name__ == "__main__":
    qin32serviceutil.HandleCommandLine( LogCopy )   
4

2 回答 2

0

"*" 字符可能会被 Windows shell 解释并扩展。尝试:

  • 在你的“*”之前加一个反斜杠。这样 rsync 将在连接的另一端为您扩展它
  • 删除“*”,然后使用 rsync 的 -r 选项对目录进行递归复制
于 2012-12-11T19:45:03.077 回答
0

发现它是什么。我正在作为系统运行任务。我在管理员帐户下设置了 ssh 密钥,但不是系统。所以 ssh 在提示时挂起以保存密钥。

于 2012-12-12T20:45:56.740 回答