2013-06-05 63 views
0

我總是使用織物將我的流程從本地PC部署到遠程服務器。如何防止織物形式等待流程返回

如果我有一個python腳本是這樣的:

test.py:

import time 
while True: 
    print "Hello world." 
    time.sleep(1) 

顯然,這個腳本是一個連續運行的腳本。 而我部署此腳本到遠程服務器,並執行這樣我的布腳本:

... 
sudo("python test.py") 

織物會一直等test.py的回報並不會exit.How我可以立即停止織物腳本而忽略test.py

+0

這就是'Fabric'的意義所在:運行任務並報告其狀態。你爲什麼要這樣?如果你在多臺機器上運行任務,'Fabric'會並行運行它們,所以這個功能似乎沒用...... – kirelagin

+0

sudo(「python test.py&」) –

+2

如果你想啓動一些服務,那不是要走的路。 [supervisor](http://supervisord.org/)是設置它的一種方法。 init-scripts,upstart是其他的,這取決於你的linux發行版。 –

回答

0

sudo("python test.py 2>/dev/null >/dev/null &")

的回報或輸出重定向到一些其他的文件,而不是的/ dev/null的

+0

這個工作很好。謝謝 – Yarkee

2

通常對於這種異步任務處理的Celery是首選。 This詳細解釋了芹菜和麪料的使用。

from fabric.api import hosts, env, execute,run 
from celery import task 

env.skip_bad_hosts = True 
env.warn_only = True 

@task() 
def my_celery_task(testhost): 
    host_string = "%[email protected]%s" % (testhost.SSH_user_name, testhost.IP) 

    @hosts(host_string) 
    def my_fab_task(): 
     env.password = testhost.SSH_password 
     run("ls") 

    try: 
     result = execute(my_fab_task) 
     if isinstance(result.get(host_string, None), BaseException): 
      raise result.get(host_string) 
    except Exception as e: 
     print "my_celery_task -- %s" % e.message 
+0

博客文章已經死了,但他的GitHub倉庫有一些腳本:https://github.com/nicholaskuechler/autoscale-rackspacecloud-fabric-celery – Nate

0

此代碼爲我工作:

fabricObj.execute("(nohup python your_file.py > /dev/null < /dev/null &)&") 

fabricObj一個目的是織物類(內部定義),其說話織物代碼。