O script de inicialização não está em execução após a reinicialização no Solaris

3

Eu tenho um comando para iniciar o Apache em /etc/rc3.d que não é executado quando o servidor é reinicializado. O script é denominado S75Apache2 . Alguém especulou que isso acontece porque o link tem um "A" maiúsculo no nome e pode funcionar se for renomeado para S75apache2 .

Alguém pode confirmar? Eu procurei por documentação, mas não consegui encontrar uma resposta. Eu não posso realmente testar isso sem reiniciar o servidor novamente (o que eu prefiro não fazer).

    
por BellevueBob 05.07.2012 / 18:57

3 respostas

3

Os scripts de inicialização do Solaris são uma dor. O capital-A não importa, existe um script em /etc/rc.d que encontra todos os arquivos em /etc/rc3.d que começam com 'S' e os executam em ordem numérica.

Isso deixa você começando do básico:

  1. O /etc/rc3.d/S75Apache2 set é executável?

  2. Esse script tem um '#!' linha? A linha está correta? bytes não impressos, etc)?

  3. Se for um script bash ou ksh, execute-o como ksh -n /etc/rc3.d/S75Apache2 start . Isso dirá se há erros de sintaxe.

  4. Se você puder executar esse script como root, tente: /etc/rc3.d/S75Apache2 start e /etc/rc3.d/S75Apache2 stop Verifique cuidadosamente se inicia httpd e pára httpd . No mínimo, execute o script com os argumentos 'start' e 'stop'. Use set -x para ver o que o script faz em tempo de execução. Verifique se o que combina corresponde ao que você acredita.

  5. Leia /etc/rc3.d/S75Apache2 com cuidado. PATH é esparsamente preenchido na inicialização, e seu script pode não saber onde alguns executáveis estão no momento da inicialização, mas podem ser executados após a inicialização. Não tente para assumir muito - arquivos podem não existir que você acha que existem, coisas assim.

  6. Verifique se não existe um script KnnApache2 em /etc/rc3.d . Acredito que o Solaris init será executado (por exemplo) K76Apache2 stop quando ele passar do nível de execução 3 para o nível 5.

  7. Assegure-se de que o script altere o ID do usuário adequadamente. Isso provavelmente não é importante para o Apache, já que seu script provavelmente chama apachectl start com alguns comandos de prólogo, mas se você executar http diretamente, certifique-se de que o processo httpd resultante tenha o ID de usuário correto. Use sudo ou algo no script para acertar.

por 05.07.2012 / 19:51
3

Acontece que houve um erro no script de inicialização: a variável LD_LIBRARY_PATH não foi configurada corretamente. Definir isso no script corrigirá o problema.

Para referência futura, existe um arquivo de log que contém mensagens de inicialização contendo o erro que levou à solução do nosso problema. O arquivo é:

/var/svc/log/milestone-multi-user-server:default.log

Eu encontrei uma referência para isso no arquivo /etc/rc3.d/README. Outro dia, outro pedaço de conhecimento!

    
por 05.07.2012 / 22:07
2

Você rolou seu próprio Apache (ou seja, compilou-o do código-fonte) ou está simplesmente usando o Apache que vem pré-instalado com o Solaris 10?

Bem, isso realmente não importa, se você estiver no Solaris 10 (ou posterior), como você diz que é você não deveria estar usando scripts de inicialização do Solaris , você deve estar usando o SMF. (Sim, tecnicamente, os scripts init ainda são suportados, mas como você aponta, eles são um problema, e o SMF é muito melhor)

Para iniciar (agora e também automaticamente após uma reinicialização) o Servidor Web Apache 2.2 que vem pré-instalado com o Solaris 10, basta fazer isso:

svcadm  enable /network/http:apache2

Se você tiver rolado seu próprio Apache, precisará criar um manifesto SMF, importar o manifesto e pronto. Apenas o Google para "SMF Solaris" e você encontrará muitas receitas.

    
por 03.09.2012 / 13:43

Tags