背景:
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [21360] using statreload
INFO: Started server process [21362]
INFO:uvicorn.error:Started server process [21362]
INFO: Waiting for application startup.
INFO:uvicorn.error:Waiting for application startup.
INFO: Application startup complete.
INFO:uvicorn.error:Application startup complete.
^CINFO: Shutting down
INFO:uvicorn.error:Shutting down
INFO: Waiting for application shutdown.
INFO:uvicorn.error:Waiting for application shutdown.
INFO: Application shutdown complete.
INFO:uvicorn.error:Application shutdown complete.
INFO: Finished server process [21362]
INFO:uvicorn.error:Finished server process [21362]
INFO: Stopping reloader process [21360]
1、用nohup的方式启动fastapi,
2、参数reload=True或者debug=True
3、nohup.out文件放在代码目录里
导致fastapi进程一直重启
原因:
debug或者reload为true且app是字符串时,uvicorn 会以重载的方式启动,会监测代码是否变化,变化后则重启进程。当重启后,会在nohup.out中打印,之后又会因为文件变化再次重新启动,陷入循环。
解决办法:
1、更改启动方式:/etc/supervisord.conf或其它
2、将nohup.out文件重定向到代码目录以外的文件
3、将reload和debug参数设为false
4、禁用uvicorn.error的propagate
logger = logging.getLogger("uvicorn.error")
logger.propagate = False