Encontrei muitos artigos semelhantes com problemas semelhantes, e alguns deles concluíram que o serviço Apache simplesmente não pode ser executado na minha situação. No entanto, consegui executar o serviço - apenas requer uma configuração indesejável em termos de segurança.
A situação é: eu tenho um projeto Django 4.2.9 hospedado no Apache 2.4 usando mod_wsgi 5.0.0, tudo em um Windows 2016 Server.
Quando executo o Apache a partir da linha de comando da Administrator
conta do servidor, ele funciona perfeitamente.
Quando instalo o serviço Apache 2.4 usando httpd.exe -k install
e reconfigurar manualmente o serviço para fazer logon como .\Administrator
, ele também funciona perfeitamente.
No entanto, se eu executar o serviço fazendo logon como LocalSystem
ou como qualquer outra conta de usuário, o serviço não será iniciado. (Observação: confirmei que todas as contas têm o privilégio Fazer logon como serviço habilitado, então esse não é o problema.) O erro é mostrado abaixo:
E também - se eu tentar executar httpd.exe
a partir da linha de comando de uma conta de usuário diferente, o executável falhará. O erro gerado no arquivo de log é:
[Fri Jan 05 14:28:08.201284 2024] [wsgi:info] [pid 5712:tid 372] mod_wsgi (pid=5712): Initializing Python.
Python path configuration:
PYTHONHOME = (not set)
PYTHONPATH = (not set)
program name = 'python'
isolated = 0
environment = 1
user site = 1
import site = 1
sys._base_executable = 'D:\\Program Files\\Apache24\\bin\\httpd.exe'
sys.base_prefix = 'C:\\Program Files\\Python310'
sys.base_exec_prefix = 'C:\\Program Files\\Python310'
sys.platlibdir = 'lib'
sys.executable = 'D:\\Program Files\\Apache24\\bin\\httpd.exe'
sys.prefix = 'C:\\Program Files\\Python310'
sys.exec_prefix = 'C:\\Program Files\\Python310'
sys.path = [
'C:\\Program Files\\Python310\\python310.zip',
'.\\DLLs',
'.\\lib',
'D:\\Program Files\\Apache24\\bin',
]
Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding
Python runtime state: core initialized
ModuleNotFoundError: No module named 'encodings'
Current thread 0x000011d8 (most recent call first): <no Python frame>
[Fri Jan 05 14:28:08.217284 2024] [mpm_winnt:crit] [pid 4432:tid 368] AH00419: master_main: create child process failed. Exiting.
Portanto, o fator comum aqui parece ser que funciona com a Administrator
conta, mas não com qualquer outra. Eu simplesmente não consigo entender por que... ou como corrigi-lo.
Mais informações relevantes: Aqui estão as informações de configuração do wsgi que obtive do mod_wsgi-express module-config
comando e colei em meu httpd.conf
arquivo:
LoadFile "C:/Program Files/Python310/python310.dll"
LoadModule wsgi_module "D:/CSCatalog/django-projects/code/cscr/.venv/lib/site-packages/mod_wsgi/server/mod_wsgi.cp310-win_amd64.pyd"
WSGIPythonHome "D:/CSCatalog/django-projects/code/cscr/.venv"
é a mensagem de erro.
encodings
é um módulo do sistema, portanto deve estar disponível no caminho de instalação padrão.Meu palpite é que o usuário Administrador tem as variáveis de ambiente
PYTHONPATH
definidas, mas os outros usuários não, daí a mensagem de erro.Você pode definir as variáveis de ambiente para um serviço .
Tente configurar o serviço para iniciar com o usuário específico que você deseja usar, mas antes você precisa conceder a permissão "Logon como serviço" para esse usuário