Fabric не может вызывать удаленный скрипт с помощью nohup - PullRequest
4 голосов
/ 29 марта 2011

На удаленном сервере у меня есть скрипт test.sh вроде:

#!/bin/bash
echo "I'm here!"
nohup sleep 100&

Из локального я запускаю 'fab runtest' для вызова удаленного test.sh.

def runtest():
    run('xxxx/test.sh')

Я могу получить вывод «Я здесь!», Но я не могу найти процесс сна в удаленном сервере.Что я пропустил?

Спасибо!

Ответы [ 3 ]

6 голосов
/ 28 мая 2013

Возможно ли запустить nohup внутри скрипта на удаленной машине?

Я проверил ответ здесь и FAQ по ткани , также получил подсказки от Похоже, что ткань запускает apache2, но не , и мне помогает объединить их вместе

Вы можете оставить свой test.sh без изменений и добавить pty=False с соответствующим перенаправлением оболочки.

from fabric.api import *
def runtest():
    run("nohup /tmp/test.sh >& /dev/null < /dev/null &",pty=False)

По крайней мере, у меня это работает.

3 голосов
/ 12 сентября 2011

Согласно FAQ по ткани вы больше не можете эффективно это делать. Вместо этого вы должны использовать tmux, screen, dtach или, что еще лучше, использовать пакет python daemon :

import daemon

from spam import do_main_program

with daemon.DaemonContext():
    do_main_program()
2 голосов
/ 15 августа 2012

Мы столкнулись с этой проблемой и обнаружили, что вы можете использовать nohup в команде, но не в самом скрипте.

Например, run('nohup xxxx/test.sh') работает.

...