Cron - сбой при вызове внешнего скрипта (инициализация переменных среды) - PullRequest
0 голосов
/ 17 августа 2011

Сценарий, частичная цель которого состоит в том, чтобы периодически подключаться к ряду хостов и при rsync возвращать некоторые журналы обратно на центральный сервер, безупречно работает при его вызове вручную,

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

однако при вызове через cron умирает с .EOF на шаге удаленной rsync,

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

Что может быть причиной? Спасибо

1 Ответ

0 голосов
/ 18 августа 2011

Вздох ... Если бы у меня не было остановки мозга, я бы вспомнил, чтобы добавить

print 'output:', p.before

и заметил, что возвращается

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

вопреки моему убеждению, ssh в rsync -e - это не вариант, а двоичный файл, таким образом, я должен либо добавить

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)
...