python — запуск команд ssh/rsync в скрипте, вызываемом через crontab

У меня очень странная проблема, которую я не могу понять.

Когда я выполняю скрипт Python, содержащий следующие строки, находясь внутри SSH-терминала (замазки), он работает нормально. Но в тот момент, когда я запускаю скрипт через crontab или даже nohup python myscript >/dev/null 2>&1&, похоже, эти команды не выполняются.

subprocess.call('rsync -avr /path/to/folder/. --include "delta.*" --exclude "*" -e "ssh -o StrictHostKeyChecking=no -i /path/to/key.pem" ec2-user@'+server+':/path/to/folder/', shell=True)
local('ssh -t -o StrictHostKeyChecking=no -i /path/to/key.pem ec2-user@'+server+' "sudo /usr/bin/indexer -c /path/to/sphinx.conf --merge main delta --rotate"')

По сути, все, что описано выше, — это синхронизация папки с новыми обновлениями поисковой системы sphinx с удаленным сервером, затем вторая строка запускает удаленную команду ssh, чтобы заставить поисковую систему чередовать обновления в рабочей среде.

У меня установлена ​​ткань (отсюда и локальная команда), но чтобы не создавать второй файл, я надеялся, что одна строка кода позволит мне выполнять команды sudo на удаленном сервере.

Кто-нибудь может мне помочь?


person Joe    schedule 23.03.2013    source источник


Ответы (1)


Я нашел ответ, для команд ssh в сценарии, работающем в фоновом режиме, вам нужно иметь -t -t, чтобы принудительно запустить псевдотерминал.

Справка:

Псевдо-терминал не будет выделен, потому что стандартный ввод не является терминалом

person Joe    schedule 24.03.2013