如何以守护进程形式启动进程?

如何以守护进程形式启动进程?

我创建了一个由 Web 前端 (nginx)、python 运行器胶水处理程序 (uwsgi) 和我自己的 python 代码 (fetcher) 组成的服务。我编写了一个脚本 (deploy.sh) 来启动不同的服务:

nginx
uwsgi --ini inifie.ini
python fetcher.py & disown

我的问题是关于如何启动我的 Python 守护进程。我希望它在后台运行。它不应该在我当前的终端上打印任何内容。如果我向我的 fetcher 脚本添加“print”调用,我目前可以在终端窗口中看到它们。

所以我的问题是:如何将我的 fetcher.py 脚本作为守护进程启动?

答案1

使用python 守护进程包装或使用守护进程工具

另请参阅流程管理

答案2

您想从 shell 脚本还是从 Python 程序执行此操作?

如果从 shell 脚本来看,这很简单:

nohup fetcher.py >/dev/null 2>&1 </dev/null & disown

如果你想通过 Python 程序来做这件事,我建议你考虑使用python-daemon 模块,也可能作为您最喜欢的类 Unix 操作系统的预制包提供。

答案3

我经常在python程序中做这样的fork:

if __name__ == '__main__':
    try:
        pid = os.fork()
        if pid > 0:
            sys.exit(0)
    except OSError:
        report( "unable to fork: %s" % sys.exc_info()[1])
        raise
    [program starts here ]

答案4

Supervisord 运行良好,并且可以配置为在发生故障时发出警报

相关内容