0

我刚刚开始使用 Fabric 来自动化我们最基本的 python 部署,我们堆栈的一部分是一个作业服务器,它使用 rq ( http://python-rq.org/ ) 作为我们在 redis 之上的队列解决方案。由于某种我无法解释的原因,rq-dashboard 和 rqworker 命令不会在结构内部启动。我可以复制/粘贴 Fabric 正在使用的确切行,它工作得很好,但在 Fabric 中失败了。

Fabric 代码如下所示:

env.activate = '. /src/venvs/appvenv/bin/activate'

@task
def deploy_jobs_box():
    with cd(repo_dir):
        with show('debug'):
            with shell_env(APP_ENV='development'), prefix(env.activate):
                run("rq-dashboard > /dev/null 2>&1 &")
                run("rqworker > logs/rqworker.log 2>&1 &")

我已经尝试了在脚本中运行 rq 命令的所有变体,等等,我能想到的,但它们都不起作用。奇怪的是,如果我确实将它们放在一个脚本中(只有这些行),并在最后包含一个“ps aux | grep rq”,我会看到 rq 进程......但是一旦 fab 脚本完成,我会检查盒子,流程都消失了。

任何帮助将不胜感激,谢谢。

4

1 回答 1

2

我需要使用 nohup (http://linux.101hacks.com/unix/nohup-command/),正如 rq 的作者 nvie 在这里有用地指出的那样:https ://github.com/nvie/rq/问题/444#issuecomment-62519088

所以:

nohup rq-dashboard > /dev/null 2>&1 & nohup rqworker > logs/rqworker.log 2>&1 &

在运行命令中解决了这个问题。

谢谢nvie。

于 2014-11-17T23:58:26.027 回答