我创建了一个由 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 运行良好,并且可以配置为在发生故障时发出警报