Apache 2.2 no Windows Server: não será iniciado após tentar alterar a letra da unidade de todos os dados e logs

6

Eu gerencio um servidor da Web que está sendo executado no Windows Server 2008 como um host virtual de 64 bits. Todo o software de serviço está sendo executado de forma independente e não como parte de uma pilha de AMP. A unidade de dados quase encheu e meu administrador de sistemas provisionou uma nova unidade virtual com mais espaço. Minha tarefa é copiar todo o volume antigo para o novo volume.

Ao criar o volume, eu assegurei que ele foi criado com o mesmo tipo de volume, sistema de arquivos, tamanho de bloco, etc. Eu parei todos os serviços relevantes (Apache, MySQL, ambos os quais executam de C: mas cujos dados estão todos localizados em D :, incluindo logs), e copiou todos os arquivos.

A partir daqui, tentei duas abordagens diferentes para fazer com que os serviços dependessem do novo volume e esquecer o antigo. O MySQL não tem nenhum problema, mas o Apache não pode iniciar como um serviço usando o método. Aqui está o que aparece no log de eventos do sistema:

The Apache2.2 service terminated with service-specific error Incorrect function

Nada aparece em error.log .

Primeiro, tentei simplesmente alterar as letras da unidade. Peguei o antigo D: e mudei para algo arbitrário, e atribuí o D: ao novo volume. Isso gerou o erro acima. Eu tentei reiniciar o servidor com as novas designações de unidade, "apenas no caso", mas o mesmo erro ocorreu. Como não entendo completamente os pontos de montagem do Windows, alterei as letras da unidade de volta para o que eram originalmente e confirmei que o serviço Apache começa bem.

Em segundo lugar, tentei simplesmente atualizar todos os arquivos de configuração do Apache e do MySQL. Toda ocorrência de "D:" (sem distinção entre maiúsculas e minúsculas) foi alterada para F: (a nova letra da unidade). Eu conheço bem os arquivos de configuração, então sei que encontrei todas as ocorrências. O erro acima ocorreu novamente, exatamente da mesma maneira. Para recuperar o funcionamento do servidor da web, reverti todas as alterações e os serviços foram iniciados com êxito.

Mais algumas informações que eu juntei:

  • link não como um serviço, a partir da linha de comando. Não há erros de sintaxe.
  • Mesmo se executado a partir da linha de comando, o Apache não será iniciado como um serviço ( httpd.exe -k runservice ).
  • O problema provavelmente não é uma das permissões de acesso a arquivos. Eu verifiquei locais chave (alguns diretórios, arquivos de log) e as permissões eram idênticas. No entanto, eu não testei isso exaustivamente.

Uma coisa que eu tenho não testado é tentar mover apenas um dos dados e locais de log para a nova unidade, enquanto deixa o outro como está. Eu não achei que isso pudesse fazer a diferença.

... Dito isto, eu não sei o que está acontecendo aqui. Não consigo pensar em nenhum motivo pelo qual o Apache não funcionaria como um serviço apenas alterando a localização dos arquivos de log e dos dados.

Eu apreciaria muito qualquer sugestão ou conselho sobre este assunto. Fico feliz em investigar mais em resposta a sugestões. Se algum de vocês acha que vale a pena tentar mover apenas um dos itens (logs ou dados) como mencionado, vou tentar isso. Da mesma forma, se algum de vocês achar que eu tenho permissões de desconto muito apressadas, farei uma análise mais completa.

Toda e qualquer entrada é bem vinda! Eu exaurei todas as minhas ideias.

    
por nmjk 17.07.2012 / 03:42

4 respostas

2

No dia seguinte, no intervalo de tempo alocado para desativar a funcionalidade principal do servidor, fui tentar algo novo e tive um novo pensamento que acabou resolvendo o problema! Os detalhes são os seguintes, no contexto dos passos que eu dei.

Comecei repetindo a segunda abordagem da pergunta original. Parei os serviços, copiei novamente todos os arquivos (para obter modificações no último dia) e editei os arquivos de configuração do Apache e do MySQL para apontar para a nova unidade (F :). Confirmei que o Apache estava produzindo o mesmo erro. Como eu já tinha os arquivos de configuração abertos, decidi experimentar o que não tentei inicialmente (e realmente deveria ter):

  • Eu restaurei os arquivos de configuração para que eles voltassem ao estado original, apontando para a unidade antiga (D :).
  • Atualizei apenas as referências a arquivos de log para a nova unidade (F :) e testei o serviço Apache - o mesmo erro de antes.
  • Eu retornei as referências do arquivo de log para D: e atualizei as referências de dados para F: - IT WORKED! Mais uma vez, eu deveria ter tentado isso ontem. O que aprendi com essa etapa foi que eram os arquivos de log que eram o problema.
  • Como havia apenas dois arquivos ( access.log e error.log ), forcei as alterações de permissão: added / removed readonly (apenas no caso), assegurei que o usuário do apache tivesse acesso de gravação recursivo por meio dos diretórios e arquivos em si.
  • Referências de arquivo de log atualizadas para F: - mesmo erro de antes.
  • Em um palpite, renomeiei os dois arquivos de log (uma técnica comum para a rotação de arquivos de log) e tentei iniciar o serviço, esperando que novas versões dos nomes de arquivos originais aparecessem - eles fizeram! O serviço começou com sucesso! Vitória !!

O que eu aprendi: na verdade, não tenho certeza. Se eu não tivesse sido tão meticuloso com várias etapas da minha investigação, suspeitaria de alças de arquivos problemáticas ou algo assim, mas não vejo como isso seria possível depois de uma reinicialização. No entanto, eu confirmei o valor de não dispensando rapidamente as possibilidades enquanto resolvia um problema. Como mencionei na pergunta, não achei que a linha de pesquisa de hoje fosse capaz de fazer a diferença, e ainda não sei por que isso aconteceu! Mas você não pode argumentar com resultados.

Conclusão: meu problema foi resolvido, mas não sei por quê. Se alguém tiver uma teoria, por favor, compartilhe-a!

    
por 18.07.2012 / 03:27
2

Não tenho ideia de por que a alteração da letra da unidade causa o problema. Mas o erro The service terminated with service-specific error Incorrect function no Windows Services é geralmente devido à falta de RAM física.

Verifique os Requisitos Mínimos do Sistema nos documentos do Apache e, se necessário, tente fechar programas desnecessários.

    
por 29.03.2015 / 14:08
1

Acabei de encontrar o mesmo problema com o mod_wsgi usando WSGIPythonHome . A partir da resposta de nmjk, decidi verificar as permissões e percebi que o usuário do Apache não tinha permissões para o diretório WSGIPythonHome . Depois de adicionar as permissões adequadas, o Apache começou normalmente.

Talvez valha a pena verificar novamente as permissões para todos os caminhos especificados pela configuração e comentar linha por linha todas as configurações que contenham um caminho para descobrir qual delas está causando o problema.

    
por 08.10.2013 / 16:23
0

Meu problema era idêntico, movi as pastas de registros para uma nova unidade. Eu segui as instruções sobre a renomeação do arquivo error.log e tentei executar o Apache, mas ele falhou com o mesmo erro. Então eu reiniciei minha máquina Windows 10 e o Apache foi lançado com sucesso.

    
por 18.02.2017 / 12:49