我总是使用fabric将我的进程从本地PC部署到远程服务器。
如果我有这样的python脚本:
test.py:
import time
while True:
print "Hello world."
time.sleep(1)
显然,这个脚本是一个连续运行的脚本。 我将此脚本部署到远程服务器并执行我的结构脚本,如下所示:
...
sudo("python test.py")
结构将始终等待test.py返回并且不会退出。如何立即停止结构脚本并忽略test.py的返回
答案 0 :(得分:3)
通常对于这种异步任务,处理Celery是首选。 This详细解释了Celery和Fabric的结合使用。
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 = "%s@%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
答案 1 :(得分:1)
sudo("python test.py 2>/dev/null >/dev/null &")
或将输出重定向到其他文件而不是/ dev / null
答案 2 :(得分:0)
此代码对我有用:
fabricObj.execute("(nohup python your_file.py > /dev/null < /dev/null &)&")
其中fabricObj
是结构类(内部定义)的对象,它与结构代码相对应。