Перезагрузить Mod_FCGGID без убийства службы Python

StackOverflow https://stackoverflow.com/questions/2684427

  •  30-09-2019
  •  | 
  •  

Вопрос

В настоящее время я запускаю проект Django на веб-сервере My School с FCGI. Я выполнял несколько руководств, которые рекомендуют установить виртуальную локальную среду Python, и она отлично отработала. Единственным вопросом, в котором у меня было то, что «прикосновение» мой FCGI-файл для перезагрузки исходных файлов было недостаточно, но вместо этого мне пришлось убить сервис Python через SSH. Это потому, что mod_fcgid используется.

Тем не менее, админ не думал, что это была отличная идея, что я побежал в моем местном питоне. Он подумал, что он лучше, если бы я только что сказал ему, какие модули устанавливают на root, который был очень хорошим сервисом.

Но делаю это, я больше не могу убивать Python, так как он находится под рулом (хотя аморал, как я, я определенно пытался). Рекомендация администраторов заключалась в том, что я должен также попробовать, сделайте скрипт FCGI перезагружать собой, проверяя метку времени. Я пытался найти документацию о том, как это сделать, но фонд очень мало и так как я абсолютный новичок, я понятия не имею, что будет работать. У кого-нибудь есть опыт работы Python / Django под Mod_FCGID или советы, где можно найти связанные гиды / документацию?

Это было полезно?

Решение

Вот что я бы сделал:

## top of my .fcgi script
import sys, time
original_modules = sys.modules.copy()

## in a separate thread
old_ctime = os.path.getctime("mymodule.py")
while True:
    time.sleep(10)
    new_ctime = os.path.getctime("mymodule.py")
    if new_ctime > old_ctime:
        sys.modules = original_modules # reset all imports
        import mymodule
        mymodule.dofcgi()

Предоставлено, это не входит в совершеннее (вам может придеться беспорядок с резьбой), но оно должно дать вам общее представление о том, как «перезагрузить» модуль полностью.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top