我需要設置:關閉WSGIRestrictSignal,因爲一旦調用了正常關機,我必須在我的python代碼中執行一些操作。基於Docker的環境配置中的Apache與mod_wsgi
從文檔:
甲表現良好的Python WSGI應用程序不應該在一般註冊它自己的使用signal.signal的任何信號處理程序()。原因是,託管WSGI應用程序的Web服務器將更有可能註冊自己的信號處理程序。如果WSGI應用程序要覆蓋這樣的信號處理程序,它可能會干擾Web服務器的操作,從而阻止諸如服務器關閉和重新啓動等操作。
你知道如何在Docker中更改配置文件嗎?
我應該只覆蓋現有的文件嗎?
這是我Dockerfile:
FROM grahamdumpleton/mod-wsgi-docker:python-2.7
ADD requirements.txt requirements.txt
RUN ["pip", "install", "-r", "requirements.txt"]
WORKDIR /app
COPY src/main/scripts/app.wsgi /app/app.wsgi
ENTRYPOINT [ "mod_wsgi-docker-start" ]
CMD [ "app.wsgi", "--processes", "1", "--port", "5000" ]
應我把這樣的事情?
ADD "httpd.conf" /tmp/mod_wsgi-localhost:5000:0/httpd.conf
至於我得到了mod_wsgi的-泊塢窗開始默認」被選擇執行的一切‘’配置。
由於該WSGIRestrictSignal設置爲這樣的事實,‘默認’是不可能的如果提出捕獲信號:
Server URL : http://localhost:5000/
Server Root : /tmp/mod_wsgi-localhost:5000:0
Server Conf : /tmp/mod_wsgi-localhost:5000:0/httpd.conf
Error Log File : /dev/stderr (warn)
Startup Log File : /dev/stderr
Request Capacity : 5 (1 process * 5 threads)
Request Timeout : 60 (seconds)
Startup Timeout : 15 (seconds)
Queue Backlog : 100 (connections)
Queue Timeout : 45 (seconds)
Server Capacity : 20 (event/worker), 20 (prefork)
Server Backlog : 500 (connections)
Locale Setting : en_US.UTF-8
[Wed Sep 06 09:37:32.673894 2017] [mpm_event:notice] [pid 14:tid 140686654945024] AH00489: Apache/2.4.25 (Unix) mod_wsgi/4.5.7 Python/2.7 configured -- resuming normal operations
[Wed Sep 06 09:37:32.674133 2017] [core:notice] [pid 14:tid 140686654945024] AH00094: Command line: 'httpd (mod_wsgi-express) -f /tmp/mod_wsgi-localhost:5000:0/httpd.conf -E /dev/stderr -D MOD_WSGI_MULTIPROCESS -D MOD_WSGI_MPM_ENABLE_EVENT_MODULE -D MOD_WSGI_MPM_EXISTS_EVENT_MODULE -D MOD_WSGI_MPM_EXISTS_WORKER_MODULE -D MOD_WSGI_MPM_EXISTS_PREFORK_MODULE -D FOREGROUND'
^C[Wed Sep 06 09:37:33.106471 2017] [mpm_event:notice] [pid 14:tid 140686654945024] AH00491: caught SIGTERM, shutting down
[Wed Sep 06 09:37:33.254507 2017] [wsgi:warn] [pid 16:tid 140686654945024] mod_wsgi (pid=16): Callback registration for signal 28 ignored.
[Wed Sep 06 09:37:33.256509 2017] [wsgi:warn] [pid 16:tid 140686654945024] File "/tmp/mod_wsgi-localhost:5000:0/handler.wsgi", line 94, in <module>
[Wed Sep 06 09:37:33.256546 2017] [wsgi:warn] [pid 16:tid 140686654945024] recorder_directory=recorder_directory)
[Wed Sep 06 09:37:33.256563 2017] [wsgi:warn] [pid 16:tid 140686654945024] File "/usr/local/python/lib/python2.7/site-packages/mod_wsgi/server/__init__.py", line 1355, in __init__
[Wed Sep 06 09:37:33.256642 2017] [wsgi:warn] [pid 16:tid 140686654945024] exec(code, self.module.__dict__)
[Wed Sep 06 09:37:33.256720 2017] [wsgi:warn] [pid 16:tid 140686654945024] File "/app/myapp.py", line 325, in <module>
[Wed Sep 06 09:37:33.256770 2017] [wsgi:warn] [pid 16:tid 140686654945024] signal.signal(signal.SIGWINCH, on_exit)
即使我解決下面的官方文檔拍攝信息的問題困擾着我:
請注意,如果啓用了註冊信號處理程序的能力,例如 ,則註冊只能從 的代碼中可靠地完成,該代碼實施爲導入由WSGIImportScript指令標識的腳本文件的副作用。這是因爲信號處理程序 只能在主要Python解釋器線程中註冊,而 請求處理程序在使用嵌入模式時和多線程Apache通常會從輔助線程執行。同樣,當 使用守護進程模式時,請求處理程序將從輔助 線程執行。只有作爲WSGIImportScript的副作用運行的代碼是 保證在主Python解釋器線程中執行。