0

一个部分目标是定期连接到一系列主机并将一些日志同步回中央服务器的脚本在手动调用它时可以完美地工作,

python ./apex2zabbix.py --sync="Client_Service_Platform Emtity"    

但是,当通过 cron 调用时,在远程 rsync 步骤中以 .EOF 结束,

command = "/usr/bin/rsync -e ssh -a %s --compress=9 -pgtov %s %s --exclude='*' %s@%s:%s%s %s" % (remote_rsync_binary, excluded_expression, filters_expression, user, ip, source_path, file_filter, target_path)

p = pexpect.spawn(command, timeout=360)

i = p.expect([ssh_new_conn,'[pP]assword:',pexpect.EOF])
print 'Initial pexpect command output: ', i
if i == 0:
    # send 'yes'
    p.sendline('yes')
    i = p.expect(['[pP]assword:',pexpect.EOF])
    if i == 0:
        # send the password
        p.sendline(passwd)
        p.expect(pexpect.EOF)
elif i == 1:
    # send the password
    p.sendline(passwd)
    p.expect(pexpect.EOF)
elif i == 2:
    print "key or connection timeout"
    pass

返回

Initial pexpect command output: 2

可能是什么原因造成的?谢谢

4

1 回答 1

0

叹息...如果我没有脑停止,我会记得添加

print 'output:', p.before

并注意到它正在返回

output: rsync: Failed to exec ssh: No such file or directory (2)

与我的看法相反, rsync -e 中的 ssh 不是一个选项,而是一个二进制文件,因此我应该添加

PATH=/sbin:/bin:/usr/sbin:/usr/bin

cron 或指定完整路径形式,/usr/bin/rsync -e /usr/bin/ssh

command = "/usr/bin/rsync -e /usr/bin/ssh -a %s --compress=9 -pgtov %s %s --exclude='*' %s@%s:%s%s %s" % (remote_rsync_binary, excluded_expression, filters_expression, user, ip, source_path, file_filter, target_path)
于 2011-08-18T18:43:06.227 回答