Если я правильно понимаю ваш вопрос, я думаю, вы делаете это слишком сложным. os.fork()
для многопроцессорной обработки, а не для запуска программы в фоновом режиме.
Допустим, ради обсуждения, что вы хотели запустить program.sh
и собрать то, что оно отправляет на стандартный вывод. Чтобы сделать это с тканью, создайте локально:
fabfile.py:
from fabric.api import run
def runmyprogram():
run('./program.sh > output 2> /dev/null < /dev/null &')
Затем локально выполните:
fab -H remotebox runmyprogram
Программа будет выполняться удаленно, но фабрика не будет ждать ее завершения. Вы должны будете собрать выходные файлы позже, возможно, используя scp. «&» Выполняет этот запуск в фоновом режиме на удаленном компьютере, и перенаправление вывода необходимо для избежания зависания сеанса фабрики .
Если вам не нужно использовать ткань, есть более простые способы сделать это. Вы можете SSH индивидуально и запустить
nohup ./program.sh > output &
затем вернитесь позже, чтобы проверить вывод.
Если это то, чем вы будете заниматься на регулярной основе, то это может быть лучшим вариантом, поскольку вы можете просто настроить задание cron так, чтобы оно запускалось так часто, а затем собирать вывод в любое время.
Если вы не хотите собирать выходные файлы позже, вы можете использовать:
fabfile.py:
from fabric.api import run
def runmyprogram():
run('./program.sh')
Затем на вашем локальном компьютере:
fab -H remotebox runmyprogram > output &
Задания будут выполняться удаленно и помещать все свои выходные данные обратно в локальный выходной файл. Это работает в фоновом режиме на вашем локальном компьютере, так что вы можете делать другие вещи. Однако, если соединение между вашей локальной и удаленной машинами может быть прервано, лучше использовать первый подход, чтобы выходные данные всегда безопасно сохранялись на удаленных машинах.