Обзор
Я пытаюсь использовать python fabric для запуска команды ssh от имени root на удаленном сервере.
Команда: nohup ./foo &
foo
ожидается, что команда будет работать в течение нескольких дней. Я должен иметь возможность отсоединить foo
от удаленного ssh-сеанса фабрики и поместить foo
в фоновый режим.
В FAQ по ткани говорится, что вы должны использовать что-то вроде screen
или tmux
, когда вы запускаете скрипт фабрики (который запускает фоновую команду). Я попробовал это, но мой сценарий ткани все еще висел. foo
не висит.
Вопрос
Как использовать фабрику для запуска этой команды на удаленном сервере без зависания скрипта: nohup ./foo &
Подробнее
Это мой сценарий:
#!/bin/sh
# Credit: https://unix.stackexchange.com/a/20895/6766
if "true" : '''\'
then
exec "/nfs/it/network_python/$OSREL/bin/python" "$0" "$@"
exit 127
fi
'''
from getpass import getpass
import os
from fabric import Connection, Config
assert os.geteuid()==0, "ERROR: Must run as root"
for host in ['host1.foo.local', 'host2.foo.local']:
# Make an ssh connection to the host...
conn = Connection(host)
# The script always hangs at this line
result = conn.run('nohup ./foo &', warn=True, hide=True)
Я всегда открываю сеанс tmux
, чтобы запустить вышеупомянутый скрипт; даже при этом скрипт зависает, когда я добираюсь до conn.run()
, выше.
Я запускаю скрипт на ванильной CentOS 6.5 VM; он работает под Python 2.7.10 и Fabric 2.1.